包含文件:<sys/time.h> <time.h>dom 1、在C語言中有time_t, tm, timeval等幾種類型的時間函數
time_t其實是長整數類型,定義爲:typedef long time_t; /* time value */指針 |
二、timevalorm
timeval是一個結構體,在time.h中定義爲:
struct timeval
{
__time_t tv_sec; /* Seconds. */
__suseconds_t tv_usec; /* Microseconds. */
};htm
其中,tv_sec爲Epoch(1970-1-1零點零分)到建立struct timeval時的秒數,tv_usec爲微秒數,即秒後面的零頭。內存
三、tmci
tm是一個結構體,定義爲:字符串
struct tm int tm_min; /*表明目前分數,範圍0-59*/ int tm_hour; /* 從午夜算起的時數,範圍爲0-23 */ int tm_mday; /* 目前月份的日數,範圍01-31 */ int tm_mon; /*表明目前月份,從一月算起,範圍從0-11 */ int tm_year; /*從1900 年算起至今的年數*/ int tm_wday; /* 一星期的日數,從星期一算起,範圍爲0-6。*/ int tm_yday; /* Days in year.[0-365] */ }; |
|
|
|
2、具體操做函數
說 明:此函數返回的時間日期未經時區轉換,而是UTC時間。 返回值:返回結構tm表明目前UTC 時間 程序例 |
|
#include "stdio.h" |
localtime()函數
功 能: 把從1970-1-1零點零分到當前時間系統所偏移的秒數時間轉換爲日曆時間 。
說 明:此函數得到的tm結構體的時間,是已經進行過期區轉化爲本地時間。
用 法: struct tm *localtime(const time_t *clock);
返回值:返回指向tm 結構體的指針.tm結構體是time.h中定義的用於分別存儲時間的各個量(年月日等)
的結構體.
程序例1:
#include <stdio.h>
#include <stddef.h>
#include <time.h>
int main(void)
{
time_t timer;//time_t就是long int 類型
struct tm *tblock;
timer = time(NULL);
tblock = localtime(&timer);
printf("Local time is: %s\n",asctime(tblock));
return 0;
}
執行結果:
Local time is: Mon Feb 16 11:29:26 2009
程序例2:
上面的例子用了asctime函數,下面這個例子不使用這個函數同樣能獲取系統當前時間。
須要注意的是年份加上1900,月份加上1。
#include<time.h>
#include<stdio.h>
int main()
{
struct tm *t;
time_t tt;
time(&tt);
t=localtime(&tt);
printf("%4d年%02d月%02d日 %02d:%02d:%02d\n",
t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
return 0;
}
localtime()和gmtime()的區別:
gmtime()函數功能相似獲取當前系統時間,只是獲取的時間未通過時區轉換。
localtime函數得到的tm結構體的時間,是已經進行過期區轉化爲本地時間。
localtime_r()和gmtime_r()函數
struct tm *gmtime_r(const time_t *timep, struct tm *result);
struct tm *localtime_r(const time_t *timep, struct tm *result);
gmtime_r()函數功能與此相同,可是它能夠將數據存儲到用戶提供的結構體中。
localtime_r()函數功能與此相同,可是它能夠將數據存儲到用戶提供的結構體中。它不須要設置tzname。
使用gmtime和localtime後要當即處理結果,不然返回的指針指向的內容可能會被覆蓋。
一個好的方法是使用gmtime_r和localtime_r,因爲使用了用戶分配的內存,這兩個函數是不會出錯的。
asctime()函數
功 能: 轉換日期和時間爲相應的字符串(英文簡寫形式,形如:Mon Feb 16 11:29:26 2009)
用 法: char *asctime(const struct tm *tblock);
ctime()函數
功 能: 把日期和時間轉換爲字符串。(英文簡寫形式,形如:Mon Feb 16 11:29:26 2009)
用 法: char *ctime(const time_t *time);
說 明:ctime同asctime的區別在於,ctime是經過日曆時間來生成時間字符串,
而asctime是經過tm結構來生成時間字符串。
mktime()函數
功 能:將tm時間結構數據轉換成通過的秒數(日曆時間)。
原 型:time_t mktime(strcut tm * timeptr);。
說 明:mktime()用來將參數timeptr所指的tm結構數據轉換成
從公元1970年1月1日0時0分0 秒算起至今的UTC時間所通過的秒數。
返回值:返回通過的秒數。
difftime()函數
功 能:計算時間間隔才長度,以秒爲單位,且只能精確到秒。
原 型:double difftime(time_t time1, time_t time0);
說 明:雖然該函數返回值是double類型的,但這並不說明該時間間隔具備同double同樣的精度,
這是由它的參數決定的。
strftime()函數
功 能:將時間格式化,或者說:格式化一個時間字符串。咱們可使用strftime()函數將時間格式化爲咱們想要的格式。
原 型:size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr);
參 數:咱們能夠根據format指向字符串中格式命令把timeptr中保存的時間信息放在strDest指向的字符串中,
最多向strDest中存放maxsize個字符。
返回值:該函數返回向strDest指向的字符串中放置的字符數。
相似於sprintf():識別以百分號(%)開始的格式命令集合,格式化輸出結果放在一個字符串中。
格式化命令說明串strDest中各類日期和時間信息的確切表示方法。格式串中的其餘字符原樣放進串中。
格式命令列在下面,它們是區分大小寫的。
%a 星期幾的簡寫
%A 星期幾的全稱
%b 月份的簡寫
%B 月份的全稱
%c 標準的日期的時間串
%C 年份的後兩位數字
%d 十進制表示的每個月的第幾天
%D 月/天/年
%e 在兩字符域中,十進制表示的每個月的第幾天
%F 年-月-日
%g 年份的後兩位數字,使用基於周的年
%G 年份,使用基於周的年
%h 簡寫的月份名
%H 24小時制的小時
%I 12小時制的小時
%j 十進制表示的每一年的第幾天
%m 十進制表示的月份
%M 十時製表示的分鐘數
%n 新行符
%p 本地的AM或PM的等價顯示
%r 12小時的時間
%R 顯示小時和分鐘:hh:mm
%S 十進制的秒數
%t 水平製表符
%T 顯示時分秒:hh:mm:ss
%u 每週的第幾天,星期一爲第一天 (值從0到6,星期一爲0)
%U 第年的第幾周,把星期日做爲第一天(值從0到53)
%V 每一年的第幾周,使用基於周的年
%w 十進制表示的星期幾(值從0到6,星期天爲0)
%W 每一年的第幾周,把星期一作爲第一天(值從0到53)
%x 標準的日期串
%X 標準的時間串
%y 不帶世紀的十進制年份(值從0到99)
%Y 帶世紀部分的十制年份
%z,%Z 時區名稱,若是不能獲得時區名稱則返回空字符。
%% 百分號
提示:與 gmstrftime() 的行爲相同,不一樣的是返回時間是本地時間。