gpt4 book ai didi

将 Unix/Linux 时间转换为 Windows FILETIME

转载 作者:行者123 更新时间:2023-12-04 22:08:26 34 4
gpt4 key购买 nike

我再次从 Windows 转到 Linux,我必须将计算 NTP 时间的函数从 Windows 移植到 Linux。看起来很简单,但格式是在 Windows FILETIME格式。我有点知道差异是什么,但到目前为止我无法正确地将我的 Linux 时间转换为 Windows FILETIME格式。有没有人对如何做到这一点有任何想法?
我看过一些关于如何执行此操作的文章,但它们都使用 Win32 函数,而我无法使用它们!如果这没有意义,我可以发布 Windows 代码。
他们还使用当前时间并从 1900 年 1 月 1 日减去它以获得增量以找到 NTP,我假设在 Linux 中我只是添加

const unsigned long EPOCH   = 2208988800UL
我的时间得到这个结果?

最佳答案

FILETIME 的 Microsoft 文档结构解释了它是什么。基本思想是一个Windows FILETIME从 1601 年 1 月 1 日起按 10-7 秒(100 纳秒间隔)的步长计数(为什么是 1601?不知道......)。在 Linux 中,您可以使用 gettimeofday() 获取从 1970 年 1 月 1 日起以微秒 (10-6) 为单位的时间.因此,以下 C 函数完成了这项工作:

#include <sys/time.h>
/**
* number of seconds from 1 Jan. 1601 00:00 to 1 Jan 1970 00:00 UTC
*/
#define EPOCH_DIFF 11644473600LL

unsigned long long
getfiletime() {
struct timeval tv;
unsigned long long result = EPOCH_DIFF;
gettimeofday(&tv, NULL);
result += tv.tv_sec;
result *= 10000000LL;
result += tv.tv_usec * 10;
return result;
}

关于将 Unix/Linux 时间转换为 Windows FILETIME,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3585583/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com