GetSystemTime,GetLocalTime,GetCurrentTime

整理了关于获得时间的三个函数:


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与日期时间格式化输出:


From:http://blog.sina.com.cn/s/blog_55bad16e0100j9vi.html

昨天写了个“网址导航搬运工”,用于将某网址导航网站上的导航信息按指定格式搬到一个XML文件中。搬运的过程中需要添加日期时间,格式像这样“Thu Feb 25 16:23:40 UTC+0800 2010”。此时想到了GetSystemTime这个API函数,该函数的原型如下:

VOID GetSystemTime(LPSYSTEMTIME lpSystemTime);

LPSYSTEMTIME是结构体指针,指向SYSTEMTIME结构体变量,定义如下:

typedef struct _SYSTEMTIME {

    WORD wYear;

    WORD wMonth;

    WORD wDayOfWeek;

    WORD wDay;

    WORD wHour;

    WORD wMinute;

    WORD wSecond;

    WORD wMilliseconds;

} 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("Sun"),

  TCHAR("Mon"),

  TCHAR("Tue"),

  TCHAR("Wed"),

  TCHAR("Thu"),

  TCHAR("Fri"),

  TCHAR("Sat"),

};

TCHAR arrMonth[13][4] =

{

  TCHAR("000"), // 这个没啥用处

  TCHAR("Jan"),

  TCHAR("Feb"),

  TCHAR("Mar"),

  TCHAR("Apr"),

  TCHAR("May"),

  TCHAR("Jun"),

  TCHAR("Jul"),

  TCHAR("Aug"),

  TCHAR("Sep"),

  TCHAR("Oct"),

  TCHAR("Nov"),

  TCHAR("Dec"),

};

相应的,像“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",

    arrDayofWeek[st.wDayOfWeek],

    arrMonth[st.wMonth],

    st.wDay,

    st.wHour + 8,

    st.wMinute,

    st.wSecond,

    st.wYear

    );

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值