Windows时间函数

1 篇文章 0 订阅

时间概念

UTC协调世界时间(Coordinated Universal Time), 又称世界统一时间,世界标准时间, 国际协调时间, 简称UTC

GMT格林尼治时间, 本初子午线被定义为通过格林尼治经线的位置,相对这条经线线的时间向东递增,向西递减,每隔一个时区,相差一个小时。

时间戳:指从197011000000秒到现在的总秒数,也被称为Unix时间戳(Unix Timestamp)

时区:时区(Time Zone)是地球上的区域使用同一个时间定义,1844年在华盛顿召开国际会议时,为克服时间上的混乱,规定将全球划分为24个时区。中国采用首都北京所在地区所在地东八区(UTC+08:00)的时间做为全国统一使用时间。

时间转换

1(s) = 1000毫秒(ms)

1毫秒(ms) = 1000微秒(us)

1微秒(us) = 1000纳秒(ns)

纳秒(ns) = 1000皮秒(ps) 


2 SystemTimeLocalTimeFileTime

下面主要针对windows下对系统时间(SystemTime)、本地时间(LocalTime)和文件时间(FileTime)做个简介

系统时间(SystemTime): Windows的系统时间采用格林尼治时间。Windows用结构体SYSTEMTIME来存储系统时间, Windows API GetSystemTime 用于获取当前的系统时间:

SYSTEMTIME st;

GetSystemTime(&st);

本地时间(LocalTime)本地时间和系统时间一样,也是用结构体SYSTEMTIME 来存储本地时间,本地时间就是系统设置的当前时间。如当前系统设置的时区为UTC+08:00, 那第操作系统右下角显示的时间就是系统的本地时间。Windows API GetLocalTime 用于获取当前系统的本地时间。

SYSTEMTIME st;
GetLocalTime(&st);

文件时间(FileTime): Windows用结构体FILETIME 存储文件时间。文件时间和本地时间、系统时间有个很大的不同点是:文件时间用64位的数据长度存储,记录了从160111000000秒到现在以100纳秒(ns)为单位的UTC时间Windows API SystemTimeToFileTime 用于当系统时间转换为文件时间。

SYSTEMTIME st;
FILETIME ft;
GetSystemTime(&st);
SystemTimeToFileTime(&st, &ft);

3 时间转换

系统时间与文件时间的转换:SystemTimeToFileTime 和 FileTimeToSystemTime 

本地时间与文件时间的转换:LocalTimeToFileTime  和 FileTimeToLocalTime

时间戳与文件时间的转换:这儿需要注意,由于时间戳和文件时间的记录起始点和单位都不一样,所以在转换的时候需要做相应的单位换算和增减这两个记录起始点之间的时间间隔。

常量116444736000000000表示从160111000000秒到197011000000秒的以100ns为单位时间间隔。

#include <windows.h>

void TimeStampToFileTime(INT64 timeStamp, FILETIME& fileTime)
{
	INT64 nll = timeStamp * 10000000 + 116444736000000000;
	fileTime.dwLowDateTime = (DWORD) nll;
	fileTime.dwHighDateTime = nll >> 32;
}

void FileTimeToTimeStamp(const FILETIME& fileTime, INT64& timeStamp)
{
	timeStamp = ((INT64)fileTime.dwHighDateTime << 32) + fileTime.dwLowDateTime;
	timeStamp = (timeStamp - 116444736000000000) / 10000000;
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值