C++时间与日期操作
2018-02-07 本文已影响25人
046ef6b0df68
文|Seraph
1. 时间换算
1纳秒等于十亿分之一秒(10-9秒)
1 纳秒 = 1000皮秒
1,000 纳秒 = 1微秒
1,000,000 纳秒 = 1毫秒
1,000,000,000 纳秒 = 1秒
2. 时间类型
UTC (Coordinated Universal Time):协调世界时,又称为世界标准时间,也就是大家所熟知的格林威治标准时间(Greenwich Mean Time,GMT)。比如,中国内地的时间与UTC的时差为+8,也就是UTC+8。美国是UTC-5。
Calendar Time:日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。
epoch:时间点。时间点在标准C/C++中是一个整数,它用此时的时间和标准时间点相差的秒数(即日历时间)来表示。
clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的。一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。
3. 时间数据结构
- FILTIME结构
FILETIME结构持有的64位无符号的文件的日期和时间值。此值表示自1601年1月1日开始的100纳秒为单位的时间。
typedef struct _FILETIME {
DWORD dwLowDateTime; /* 低 32 位 */
DWORD dwHighDateTime; /* 高 32 位 */
} FILETIME, *PFILETIME, *LPFILETIME;
- SYSTEMTIME结构
SYSTEMTIME结构定义如下:
SYSTEMTIME STRUCT
{
WORD wYear ; 年
WORD wMonth ;月
WORD wDayOfWeek ;星期,0=星期日,1=星期一...
WORD wDay ;日
WORD wHour ;时
WORD wMinute ;分
WORD wSecond ;秒
WORD wMilliseconds ;毫秒
}SYSTEMTIME ENDS
4. UTC时间操作
公式:UTC + 时区差 = 本地时间
- 得到当前UTC时间
void GetSystemTime(LPSYSTEMTIMElpSystemTime);
- 得到当地时间
void GetLocalTime(LPSYSTEMTIMElpSystemTime);
- SYSTEMTIME转成FILETIME
BOOL SystemTimeToFileTime(
const SYSTEMTIME* lpSystemTime,
LPFILETIMElpFileTime
);
- FILETIME转成SYSTEMTIME
BOOL FileTimeToSystemTime(
const FILETIME* lpFileTime,
LPSYSTEMTIMElpSystemTime
);
- 当地时间转成UTC时间
BOOL LocalFileTimeToFileTime(
const FILETIME* lpLocalFileTime,
LPFILETIMElpFileTime
);
- UTC时间转成当地时间
BOOL FileTimeToLocalFileTime(
const FILETIME* lpFileTime,
LPFILETIMElpLocalFileTime
);