struct tm

在標準C/C++中,我們可通過tm結構來獲得日期和時間,tm結構在time.h中的定義如下: #ifndef _TM_DEFINED struct tm int tm_sec; /* 秒 – 取值區間為[0,59] */ int tm_min; /* 分 - 取值區間為[0,59] */ int tm_hour; /* 時 - 取值區間為[0,23] */ int tm_mday; /* 一個月中的日期 - 取值區間為[1,31] */ int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */ int tm_year; /* 年份,其值等於實際年份減去1900 */ int tm_wday; /* 星期 – 取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */ int tm_yday; /* 從每年的1月1日開始的天數 – 取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */ int tm_isdst; /* 夏令時標識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的時候,tm_isdst為0;不了解情況時,tm_isdst()為負。 long int tm_gmtoff; /*指定了日期變更線東面時區中UTC東部時區正秒數或UTC西部時區的負秒數*/ const char *tm_zone; /*當前時區的名字(與環境變數TZ有關)*/ ; #define _TM_DEFINED #endif

基本信息

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;

如上的操作是合法的。

相關詞條

熱門詞條

聯絡我們