基本信息
ANSI C標準稱使用tm結構的這種時間表示為分解時間(broken-down time)。
tm_sec 有時會超過59,其中60表示閏秒。也有時候達到3位數。
格式轉換
可以使用的函式是gmtime()和localtime()將time()獲得的日曆時間time_t結構體轉換成tm結構體。
其中gmtime()函式是將日曆時間轉化為世界標準時間(即格林尼治時間),並返回一個tm結構體來保存這個時間,而localtime()函式是將日曆時間轉化為本地時間。
程式舉例
#include <stdio.h>
#include <time.h>
int main(void)
{
struct tm *ptr;
time_t lt;
lt =time(NULL);
ptr=localtime(<);
printf("second:%d\n",ptr->tm_sec);
printf("minute:%d\n",ptr->tm_min);
printf("hour:%d\n",ptr->tm_hour);
printf("mday:%d\n",ptr->tm_mday);
printf("month:%d\n",ptr->tm_mon+1);
printf("year:%d\n",ptr->tm_year+1900);
return 0;
}
注意事項
通過自定義的指針(struct tm *)對tm結構體成員的引用不包含賦值操作,除非另外定義tm結構體變數。
例如:
struct tm *p={0};
之類的賦值操作都是非法的。
在linux下,通過自定義指針對tm結構體成員賦值操作編譯可以通過,但執行會提示段錯誤Segmentation fault(coredump);在gdb模式下,會得到“Cannot access memory at address XXX”的警告。
如果要利用tm結構體成員保存時間數據,可以另外定義struct tm類型的變數。
例如:struct tm t;
t.tm_hour=14;
p->tm_hour=14;
如上的操作是合法的。