-
struct tm
鎖定
#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日,以此類推 */
long int tm_gmtoff; /*指定了日期變更線東面時區中UTC東部時區正秒數或UTC西部時區的負秒數*/
const char *tm_zone; /*當前時區的名字(與環境變量TZ有關)*/
};
#define _TM_DEFINED
- 中文名
- struct tm
- 格式轉換
- gmtime()和localtime()
- 年 份
- 其值等於實際年份減去1900
- 通 過
- tm結構
- 用 途
- 獲得日期和時間
struct tm基本信息
ANSI C標準稱使用tm結構的這種時間表示為分解時間(broken-down time)。
tm_sec 有時會超過59,其中60表示閏秒。也有時候達到3位數。
struct tm格式轉換
其中gmtime()函數是將日曆時間轉化為世界標準時間(即格林尼治時間),並返回一個tm結構體來保存這個時間,而localtime()函數是將日曆時間轉化為本地時間。
[1]
struct tm程序舉例
#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注意事項
通過自定義的指針(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;
- 參考資料
-
- 1. C語言中兩種方式表示時間日期值time_t和struct tm類型的相互轉換 .博客頻道-CSDN[引用日期2017-03-14]
- 2. tm .cplusplus[引用日期2017-01-08]