SystemTimeToFileTime在linux中完全替换

时间:2013-02-01 12:56:43

标签: c linux time

试图找到功能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函数的确切替换吗?

4 个答案:

答案 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)

SYSTEMTIME

  

指定日期和时间,使用月,日,年,工作日,小时,分钟,秒和毫秒的各个成员。时间可以是协调世界时(UTC)或本地时间,具体取决于被调用的函数。

最近的类型是struct tm,虽然它没有毫秒。

FILETIME

  

包含一个64位值,表示自1601年1月1日(UTC)以来100纳秒间隔的数量。

您可以使用struct timeval(支持微秒)或struct timespec(支持纳秒)

并非所有文件系统都支持纳秒,例如ext4

SystemTimeToFileTime

你可以使用mktime,虽然从纪元(1970-01-01 00:00 UTC)开始只有几秒钟。

所以,我会说完全替换是困难的,至少可以说。

答案 3 :(得分:0)

Linux没有“文件时间”这样的概念。根据您正在做的事情,最好使用difftime(将两个time_t之间的差值以秒为单位作为浮点数),或者使用一些更精确的时间戳并将其转换为10ms间隔的差异?

您可以使用mktime将日期/时间值转换为time_t