以下代码的目标是调用 Win32 函数 FileTimeToSystemTime
:
pub fn convert_times(s: SystemTime) -> Option<SYSTEMTIME> {
let mut st = SYSTEMTIME::default();
let x: u64 = unsafe { transmute(s) };
let low = (x & 0x00000000FFFFFFFF) as u32;
let high = ((x & 0xFFFFFFFF00000000) >> 32) as u32;
let fs = FILETIME {
dwLowDateTime: low,
dwHighDateTime: high,
};
if unsafe { FileTimeToSystemTime(transmute(&fs), transmute(&mut st)) } > 0 {
Some(st)
} else {
None
}
}
当我使用已知文件时间 131147233180069965
时,它是根据我计算机的时钟在 2016-08-03T14:41 US-EST(GMT+5)
生成的。我从中得到的返回结构返回 2016-0803T18:41:58.006
这是 +4 小时。
美国东部标准时间是 GMT+5?
是因为夏令时是-1小时吗?
最佳答案
FileTimeToLocalFileTime()
返回 UTC 时间。在美国,通常在 EST 的位置在夏令时期间转换为 EDT,因此它将是 GMT+5 DST-1 或 UTC-4。
要获取本地时区的时间并考虑夏令时,需要调用 SystemTimeToTzSpecificLocalTime()
。
通常这是不可取的,因为在 UTC 中工作对计算机来说更可取,因为 2 台相互通信的计算机不一定在同一时区。
关于winapi - Windows SYSTEMTIME 结构与系统时钟不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751677/