加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

将Unix / Linux时间转换为Windows FILETIME

发布时间:2020-12-15 18:58:46 所属栏目:安全 来源:网络整理
导读:我再次从Windows转向Linux,我必须将一个从Windows移植到Linux的函数来计算NTP时间.看似简单但格式为Windows FILETIME格式.我有点想知道差异是什么,但到目前为止我无法正确地将我的Linux时间转换为Windows文件时格式.有没有人对如何做到这一点有任何想法? 我
我再次从Windows转向Linux,我必须将一个从Windows移植到Linux的函数来计算NTP时间.看似简单但格式为Windows FILETIME格式.我有点想知道差异是什么,但到目前为止我无法正确地将我的Linux时间转换为Windows文件时格式.有没有人对如何做到这一点有任何想法?

我看过一些关于如何做到这一点的文章,但他们都使用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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读