试图找到功能SystemTimeToFileTime的完整模拟,但找不到它。
我拥有所有SYSTEMTIME和FILETIME结构,并且在linux上正确运行SYSTEMTIME以获取日期差异功能:
int64_t Delta2(const SYSTEMTIME st1, const SYSTEMTIME st2) {
union timeunion { FILETIME fileTime; ULARGE_INTEGER ul; } ;
timeunion ft1;
timeunion ft2;
SystemTimeToFileTime(&st1, &ft1.fileTime);
SystemTimeToFileTime(&st2, &ft2.fileTime);
return ft2.ul.QuadPart - ft1.ul.QuadPart;
}
有人知道SystemTimeToFileTime
函数的确切替换吗?
答案 0 :(得分:1)
FILETIME
只是一个分辨率为10毫秒的时间戳,分为两个32位数字。 POSIX时间戳(具有第二个分辨率)可以简单地乘以100来获得它。
要从SYSTEMTIME
转到FILETIME
,您可以使用相关字段创建struct tm
,并使用mktime
创建time_t
。将该时间戳放在64位整数中,乘以100(得到10毫秒的分辨率)并添加SYSTEMTIME
wMilliseconds
字段(除以10),然后得到FILETIME
。< / p>
答案 1 :(得分:0)
我建议您查阅WINE项目的来源,其中包含您需要的内容。
答案 2 :(得分:0)
指定日期和时间,使用月,日,年,工作日,小时,分钟,秒和毫秒的各个成员。时间可以是协调世界时(UTC)或本地时间,具体取决于被调用的函数。
最近的类型是struct tm
,虽然它没有毫秒。
包含一个64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量。
您可以使用struct timeval
(支持微秒)或struct timespec
(支持纳秒)
并非所有文件系统都支持纳秒,例如ext4
。
你可以使用mktime
,虽然从纪元(1970-01-01 00:00 UTC)开始只有几秒钟。
所以,我会说完全替换是困难的,至少可以说。
答案 3 :(得分:0)
Linux没有“文件时间”这样的概念。根据您正在做的事情,最好使用difftime
(将两个time_t之间的差值以秒为单位作为浮点数),或者使用一些更精确的时间戳并将其转换为10ms间隔的差异?
您可以使用mktime
将日期/时间值转换为time_t
。