Windows中的时间(SYSTEMTIME和FILETIME)

Windows时间戳的计算 掌握WindowsFileTime时间戳的手工解析方法,利用WinHex或X-Ways等十六进制编辑器进行手工取证,把Windows中$MFT文件里记载的十六进制时间转化为“年月日时分秒”的可读时间,加深对于时间戳的理解。 阅读详情

    上一篇中介绍了C运行库中的时间处理函数。这一篇介绍Windows SDk中提供的时间函数。两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC实现),同样提供本地时间和UTC时间之间的转换。不过CRT中的tm时间在SDK中对应为系统时间(SYSTEMTIME),CRT中的time_t时间在SDK中对应的为文件时间(FILETIME),那个"特殊时刻"也变成1601年1月1日的子夜。

    当然,首先要弄清楚FILETIME与SYSTEMTIME定义。

   

    比较一下,很明显,FILETIME与time_t类似,是64位整型,不过FILETIME是以100纳秒(ns)为单位。SYSTEMTIME与tm类似,不过多了一项wMilliseconds。可以看出,SDK时间比CRT的时间提供了更高的精度。同时SDK提供了更丰富的函数来处理时间。

   

    这两个函数获得SYSTEMTIME形式的当前时间,不过GetSystemTime函数获得当前的UTC时间,GetLocalTime获得当前的本地时间,可以想象,获得的两个时间存在着时差。类似于CRT中提供tm与time_t之间的转换,SDK也提供了两个函数来转换SYSTEMTIME时间与FILETIME时间。

   

    函数命名很self-explanatory,就不用多说了吧。

    SDK还提供了两个很有趣的函数。

   

    LocalFileTimeToFileTime函数将本地的FILETIME时间转换为对应的UTC的FILETIME时间。我觉得,这个函数只是通过将本地时间减去与UTC时间的时间差来实现转换,比如在东八区的本地时间转换为对应的UTC时间,只需要将本地时间减去8*60*60*1000*1000*10(单位100ns)。类似,FileTimeToLocalFileTime函数是将UTC时间转换为本地时间,它只是将减去时间差换成加上时间差。

    了解了这些功能,让我们用代码说话吧。

   

    程序输出结果如下:

    程序输出结果

    代码13行GetLocalTime函数获得当前的本地SYSTEMTIME时间,14行获得对应的UTC的SYSTEMTIME时间,如输出结果前两行所显示,两者相差8小时(凌晨还在写博客,表扬下自己。。。)。

    20行SystemTimeToFileTime函数将本地SYSTEMTIME时间转换为方便计算的本地FILETIME形式时间,如输出结果第三行所显示。

    25行LocalFileTimeToFileTime函数将本地FileTime时间转换为对应的UTC的FILETIME时间,如输出结果第四行所显示。就像前面介绍的,如果你将输出结果第三,四两行所显示的数字相减,并除以10*1000*1000*60*60,你将会得出8,你可以算下试试,记住FILETIME是以100纳秒为单位的。

    最后30行FileTimeToSystemTime将FILETIME时间转换为SYSTEMTIME时间。可以看出输出结果中第五行与第二行相同,这是必须的,因为两者都是当前本地时间对应的UTC时间。

C/C++时间相关操作 SYSTEMTIME time_t 字符串的相互转换 ****************** 一、 时间相关 ****************** SYSTEMTIME time_t 是长整型,long int tm 是一个结构体 time.h localtime mktime GetLocalTime(&sysTime ); 获取当前时间 SYSTEMTIME类型 CTime t = GetCurrentTime(); MFC 阅读详情

相关推荐

获取系统时间的几种方法

1.使用system("time")语句: 该方法用于在命令提示符中获取系统当前时间信息(只有时间,没有日期),并提示重新输入时间信息修改当前时间信息 2.利用API函数GetLocalTime 该方法获取当前日期时间:注意(需要包含windows.h头文件) SYSTEMTIME sys; GetLocalTime(&sys); char szDst[MAX_PATH] = { 0 }; sprintf_s(szDst, MA...

shigzhu的专栏 8337

SYSTEMTIMEtime_t的用法例子

#include <stdio.h> #include <time.h> #include <windows.h> int main() { SYSTEMTIME s; GetLocalTime(&s); printf("It's %d/%d/%d %02d:%02d:%02d now.", s.wYear, s.wMonth, s.wDay, s.wHour, s.wMinute, s.wMinute); printf("\nAnd i

david412306524的专栏 2229

C++中如何使用SYSTEMTIME获取系统时间并格式化为字符串?

结构体通常与Windows API一起使用来获取系统时间,但直接将其格式化为字符串并不是最直接的方法。通常,更简便跨平台的方法是使用标准库中的。这个方法更加简洁,并且不需要处理时区转换的复杂性,因为它直接使用了系统本地时间。头文件来处理时间日期。然而,如果你确实需要使用。

学无止尽,谨言慎行! 1848

Windows中的时间(SYSTEMTIMEFILETIME) (转载)

转载:http://blog.csdn.net/bokee/article/details/5330791 两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC实现),同样提供本地时间UTC时间之间的转换。不过CRT中的tm时间在SDK中对应为系统时间(SYSTEMTIME),CRT中的time_t时间在SDK中对应的为文件时间(FILETIM...

weixin_30481087的博客 136

Windows中的时间(SYSTEMTIMEFILETIME)&CRT中的时间(time_ttm)

地址:http://blog.csdn.net/bokee/article/details/5330791 上一篇中介绍了C运行库中的时间处理函数。这一篇介绍Windows SDk中提供的时间函数。两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC实现),同样提供本地时间UTC时间之间的转换。不过CRT中的tm时间在SDK中对应为系统时间(SYSTEM

wowolook的专栏 4145

Windows中的时间(SYSTEMTIMEFILETIME) .

上一篇中介绍了C运行库中的时间处理函数。这一篇介绍Windows SDk中提供的时间函数。两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC实现),同样提供本地时间UTC时间之间的转换。不过CRT中的tm时间在SDK中对应为系统时间(S

sunliangyuan的专栏 1949
上一篇: CRT中的时间(time_t和tm)
下一篇: linux下编译安装gcc
bokee
博客等级 码龄21年 96粉丝 20原创
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值