以下代码的目标是调用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小时。
而US-EST是GMT+5?
是不是因为夏令时是-1小时?
发布于 2016-08-05 20:45:45
FileTimeToLocalFileTime()返回协调世界时的时间。在美国,通常位于东部夏令时的地点将在夏令时转换为东部夏令时,因此它将是美国东部夏令时-1或GMT+5 -4。
要获取本地时区的时间并考虑到DST,则需要调用SystemTimeToTzSpecificLocalTime()。
一般来说,这是不可取的,因为在UTC中工作对于计算机来说是可取的,因为两台相互通信的计算机不一定在同一时区。
https://stackoverflow.com/questions/38751677
复制相似问题