【C/C++中时间结构体之间的转换】
创始人
2025-05-30 05:27:45
0

文章目录

  • 概要:本期主要介绍C/C++中常见的表达时间的结构体,以及它们之间的转换关系。
  • 一、FILETIME
  • 二、time_t
  • 三、timeval
  • 四、tm
  • 五、时间结构之间的转换
    • 1.FILETIME --> time_t
    • 2.time_t --> tm
    • 3.tm --> time_t
  • 六、时间结构显示为现在的常用时间
    • 1.tm结构
    • 2.time_t结构
  • 结尾

概要:本期主要介绍C/C++中常见的表达时间的结构体,以及它们之间的转换关系。

一、FILETIME

FILETIME结构保留文件的无符号 64 位日期和时间值。 此值表示自1601 年 1 月 1 日开始以来的 100 纳秒单位数 。
具体结构如下所示:

typedef struct _FILETIME
{DWORD dwLowDateTime;DWORD dwHighDateTime;
} FILETIME, FAR *LPFILETIME;

其中 DWORD类型 为unsigned long无符号长整型,dwLowDateTime表示文件时间值的低序 32 位。
dwHighDateTime表示文件时间值的高序 32 位。

二、time_t

在计算机中看到的utc时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。time_t其实是long长整型。
具体结构如下所示:

typedef long  time_t;

三、timeval

timeval也是用于表示UTC时间,即从1970年01月01日 0:00:00开始的时间。但是timeval结构可以精确到微秒。
具体结构如下所示:

struct timeval
{long tv_sec; /*秒*/long tv_usec; /*微秒*/
};

四、tm

tm结构是用于存储UTC时间,且按照年月日时分秒的结构。
具体结构如下所示:

struct tm
{int tm_sec;  /*秒,正常范围0-59, 但允许至61*/int tm_min;  /*分钟,0-59*/int tm_hour; /*小时, 0-23*/int tm_mday; /*日,即一个月中的第几天,1-31*/int tm_mon;  /*月, 从一月算起,0-11  1+p->tm_mon;*/int tm_year;  /*年, 从1900至今已经多少年  1900+ p->tm_year;*/int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6*/int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/int tm_isdst; /*日光节约时间的旗标*/
};

五、时间结构之间的转换

引入头文件 #include

1.FILETIME --> time_t

time_t FILETIMEToTime_t(FILETIME *pTime)
{ULARGE_INTEGER ull;//ULARGE_INTEGER 是64位无符号整型结构ull.LowPart = pTime->dwLowDateTime;ull.HighPart = pTime->dwHighDateTime;return ull.QuadPart / 10000000ULL - 11644473600ULL;
}	

2.time_t --> tm

struct tm* gmtime(const time_t *timep);
/*将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个struct tm结构指针*/
stuct tm* localtime(const time_t *timep);
/*和gmtime类似,但是它是经过时区转换的时间。*/

3.tm --> time_t

time_t mktime(struct tm* timeptr);
/*将struct tm 结构的时间转换为从1970年至今的秒数*/

六、时间结构显示为现在的常用时间

1.tm结构

char *asctime(const struct tm* timeptr);
/*将结构中的信息转换为真实世界的时间,以字符串的形式显示*//*或者通过自定义输出*/
printf("time: %04d-%02d-%02d %02d:%02d:%02d\n", 1900 + p->tm_year,1+p->tm_mon,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec );

2.time_t结构

char *ctime(const time_t *timep);
/*将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样*/

结尾

本期对于C/C++中的时间结构的解析就到这,下期再会:)

相关内容

热门资讯

造假泛滥、虫入车间、产能拉胯:... 订阅 快刀财经 ▲ 做您的私人商学院世界药房的致命短板。作者:朱末来源:快刀财经(ID:kuai...
影石创新股价“脚踝斩”,刘靖康... 出品|达摩财经近日,第三方数据公司IDC发布了2026年一季度全球手持智能相机行业报告。报告数据显示...
美股半导体股,集体上涨 美股半... 6月29日,美股三大指数集体高开,道指涨0.29%,纳指涨0.96%,标普500指数涨0.55%。 ...
三只*ST股,将摘星脱帽 st... 6月29日晚间,A股三家*ST公司公告称将“摘星脱帽”。 具体来看,*ST艾艾发布关于撤销退市风险警...
【就业创业典型】大棚逐梦人:一... 编者按:近年来,延安市残疾人工作坚持以习近平新时代中国特色社会主义思想为指导,以促进残疾人事业全面高...
公募基金锚定新质生产力,多维赋... 6月22日消息,中国证监会主席吴清近日在2026陆家嘴论坛上表示,资本市场与新质生产力双向奔赴、相互...
液冷服务器概念震荡走强,冰轮环... 6月22日消息,午后液冷服务器概念震荡走强,冰轮环境9天5板,此前康盛股份涨停,大元泵业、川润股份、...
涉留神峪煤矿事故,国家矿山安全... 6月22日消息,国家矿山安全监察局山西局监察执法八处三级调研员耿青禄涉嫌严重违法,涉通洲集团留神峪煤...
周立成拟任中国投资协会秘书长 6月22日消息,中国投资协会发布关于中国投资协会第五届理事会届中调整负责人人选的公示:周立成,男,汉...
以防长称以军已做好对伊采取独立... 据央视新闻,以色列国防部长卡茨日前在与军事记者的闭门谈话中,阐述了以色列在黎巴嫩、伊朗及加沙地带等多...