由unix核心提供的基本時間服務是計算 自國際標準時間公元2023年1月1日00:00:00以來經過的秒數,以time_t表示。以下2個
函式返回當前時間。
[cpp]view plain
copy
#include
time_t
time(
time_t
* ptr);
//成功則返回時間值,出錯則返回-1.
時間總是作為函式值返回,如果引數不為空,則時間值也存放在由ptr指向的單元內。
如果要獲取更高的解析度(微秒級),可以使用gettimeofday函式。
[cpp]view plain
copy
#include
intgettimeofday(
struct
timeval *restrict tp,
void
*restrict tzp);
//返回值總是0
tzp的唯一合法值是null,使用其他值將產生不確定的結果。某些平台支援用tzp說明時區,但這完全依賴平台的實現。
struct timeval的定義如下:
[cpp]view plain
copy
struct
timeval
取得了以秒計的整型的時間值後,通常要呼叫另乙個時間函式將其轉換**們可讀的時間和日期,下圖說明了各種時間函式
之間的關係。(其中虛線表示的四個函式收到環境變數tz的影響,如果定義了tz,則這些函式將使用其值代替系統預設時區)
localtime和gmtime函式將time_t時間轉換成年月日時分秒週日表示的時間,並將這些存放在乙個tm結構中。
[cpp]view plain
copy
struct
tm
[cpp]view plain
copy
#include
struct
tm* gmtime(
const
time_t
*calptr);
//將日曆時間轉換成國際標準時間
struct
tm* localtime(
const
time* calptr);
//將日曆時間轉換成本地時間
兩個函式都返回指向tm結構的指標。
函式mktime以本地時間的年,月,日等作為引數,將其轉換成time_t值。
[cpp]view plain
copy
#include
time_t
mktime(
struct
tm* tmptr);
//若成功則返回日曆時間,出錯則返回-1
函式asctime和ctime函式產生如下面形式的字串:
mon oct 28 10:42:06 cst 2013
[cpp]view plain
copy
#include
char
*asctime(
const
struct
tm* tmptr);
char
*ctime(
const
time_t
*calptr);
兩個函式返回值,指向以null結尾的字串指標。
strftime函式類似於printf函式,將時間格式化輸出。
[cpp]view plain
copy
#include
size_t
strftime(
char
* restrict buf,
size_t
maxsize,
const
char
*restrict format,
const
struct
tm* restrict tmptr);
如果成功則返回存入buf的字元數,否則返回0
下圖是format的格式符表:
實踐:[cpp]view plain
copy
#include
#include
#include
intmain(
void
) 執行結果:
yan@yan-vm:~/apue$ ./a.out
1374895850
1374895850,276840
sat jul 27 03:30:50 2013
sat jul 27 11:30:50 2013
sat jul 27 11:30:50 2013
1374895850
從結果來看,asctime和ctime會在字串末尾自動加換行符。
如果增加了環境變數tz,執行結果:
yan@yan-vm:~/apue$ export tz=gmt
yan@yan-vm:~/apue$ ./a.out
1374895990
1374895990,366091
sat jul 27 03:33:10 2013
sat jul 27 03:33:10 2013
sat jul 27 03:33:10 2013
1374895990
《unix環境高階程式設計》筆記2
第四章 檔案和目錄 本章將描述檔案系統特徵和檔案性質 1 stat fstat和lstat函式 原型 include int stat const char restrict pathname,struct stat restrict buf int fstat int filedes,struct...
UNIX環境高階程式設計學習筆記
include include include include int main int argc,char argv err sys can t open s argv 1 while dirp readdir dp null printf s n dirp d name closedir dp ...
unix環境高階程式設計
unix 日曆時間 自1970 年1 月1 日00 00 00 以來的國際標準時間 utc 程序時間 cpu 時間 時鐘時間 程序執行時間的總量。使用者cpu 時間 執行使用者指令時間量。系統cpu 時間 執行核心所經歷時間。命令 time 第三章至第七章 原子操作 任何乙個要求多於1 個函式呼叫的...