首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux中SystemTimeToFileTime的精确替换

问linux中SystemTimeToFileTime的精确替换
EN

Stack Overflow用户
提问于 2013-02-01 20:56:43
回答 4查看 2.1K关注 0票数 0

已尝试查找功能SystemTimeToFileTime的完整模拟,但找不到它。

我有所有的SYSTEMTIME和FILETIME结构,在linux上SYSTEMTIME可以正常工作,用于日期差异函数:

代码语言:javascript
复制
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函数的确切替代方法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-01 20:58:18

我建议你参考WINE项目的源码,它将包含你所需要的东西。

票数 0
EN

Stack Overflow用户

发布于 2013-02-01 21:05:20

FILETIME只是一个10毫秒精度的时间戳,分成两个32位数字。POSIX时间戳(具有第二个分辨率)可以简单地乘以100得到它。

要将SYSTEMTIME转换为FILETIME,可以使用相关字段创建一个struct tm,然后使用mktime创建一个time_t。将时间戳放入64位整数中,乘以100 (得到10毫秒分辨率),再加上SYSTEMTIME wMilliseconds字段(除以10),就得到了FILETIME。

票数 1
EN

Stack Overflow用户

发布于 2013-02-01 21:21:25

SYSTEMTIME

指定日期和时间,使用单个成员表示月、日、年、周、小时、分钟、秒和毫秒。时间可以采用协调世界时(UTC)或本地时间,具体取决于所调用的函数。

最接近的类型是struct tm,尽管它没有毫秒。

FILETIME

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

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

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

SystemTimeToFileTime

您可以使用mktime来实现这一点,尽管您将仅获得自纪元(1970-01-01 00:00UTC)以来的秒数。

因此,我会说,至少可以说,准确的替代是困难的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14646822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档