整理了关于获得时间的三个函数:
1. GetSystemTime与GetLocalTime区别:
GetSystemTime获得的时间是基于通用协调时(UTC, Universal Time Coordinated)。GetLocalTime获得的时间是基于本地时间的。如GetLocalTime获得的本地主机的时间是上午8时,当用GetSystemTime获取时,该时间是0时,注意这两个函数的区别
2. GetCurrentTime
CTime tm = CTime::GetCurrentTime(); //获取当前时间与1970年1月1日8am的秒数差。 这两个是windows的api,不属于c语言的。
3.GetSystemTime与日期时间格式化输出:
昨天写了个“网址导航搬运工”,用于将某网址导航网站上的导航信息按指定格式搬到一个XML文件中。搬运的过程中需要添加日期时间,格式像这样“Thu Feb 25 16:23:40 UTC+0800 2010”。此时想到了GetSystemTime这个API函数,该函数的原型如下: VOID GetSystemTime(LPSYSTEMTIME lpSystemTime); LPSYSTEMTIME是结构体指针,指向SYSTEMTIME结构体变量,定义如下: typedef struct _SYSTEMTIME { } SYSTEMTIME, *PSYSTEMTIME; 该结构体用于表示日期和时间,各个成员分别表示年,月,星期,天,小时,分钟,秒和毫秒。 显然,GetSystemTime函数返回的日期和时间还不能直接表示成“Thu Feb 25 16:23:40 UTC+0800 2010”这样的格式。需要改动的地方有星期和月份,应该用字符串表示成如“Thu Feb”这样的格式。另外,需要特别注意的是,GetSystemTime获得的时间是协调世界时(GMT),即格林威治天文台所在时区的时间。因此,我们需要自己加上相应的时区时间差。 接下来,来解决这两个问题。 由MSDN文档知,对于月份有January = 1, February = 2...等等,对于星期有Sunday = 0, Monday = 1...等等。因此这里需要定义两个二维字符数组,分别表示星期和月份,如下: TCHAR arrDayofWeek[7][4] = { }; TCHAR arrMonth[13][4] = { }; 相应的,像“Thu Feb 25 16:23:40 UTC+0800 2010”这种日期时间格式可以这么输出: SYSTEMTIME st; GetSystemTime(&st); printf( "<addtime>%s %s %d %02d:%02d:%02d UTC+0800 %04d</addtime>\n", |