【问题标题】:Convert ulong FILETIME to datetime将 ulong FILETIME 转换为日期时间
【发布时间】:2014-10-03 05:36:10
【问题描述】:

我的程序以ulong 格式接收文件时间,我必须将其转换为DateTime 格式。所以这是我写的函数。

public static DateTime fileTimeToDateTime(ulong fileTime)
{
    long temp = (long)fileTime;
    DateTime dt1 = DateTime.FromFileTime(temp);
    return dt1;
}

但是对于文件时间 2213360000 ,函数返回 1/1/1601 12:00:00 AM 但正确的应该是 4/22/2009 3:28:29 PM 所以我用这个 webpage 将文件时间转换为人类可读的时间,它给了我正确的值。所以我的功能看起来有问题。然后我使用此代码和平转换正确的日期。

string windowsTime = "4/22/2009 3:28:29 PM";
DateTime time = DateTime.Parse(windowsTime);
long ft = time.ToFileTime();

所以这里的输出ft128848589090000000,而不是我得到的文件时间(2213360000)。所以看起来我的想法有问题。有什么想法吗?

【问题讨论】:

  • 只是一个猜测,但它的精度可能低于完整文件时间。乘以 10 的某个幂可能会产生“正确”的结果。虽然最好能从源头验证您收到的值究竟是什么意思。

标签: c# datetime filetime


【解决方案1】:

FromFileTime 期望来自 Windows 的 GetFileTime 函数的输出——FILETIME 结构。它测量自 1601 年 1 月 1 日 (UTC) 以来的 100 纳秒间隔数。

2213360000 100 纳秒的间隔约为 0.02 秒。

现在要查看的是您从哪里获取FILETIME,或者您是否误解了该方法的用途。你能用提供你方法的代码更新你的问题吗?

【讨论】:

  • 此文件时间来自不同公司提供的 DLL。但你看到网页给了我正确的日期时间。所以应该有办法得到它。
  • 您需要查看该网站的阅读格式。这绝对不是 2009 年的FILETIME
【解决方案2】:

您是否考虑过链接中的转换器损坏的可能性?如果将数字减少九个数量级,输入 2 而不是 2213360000 并让它转换,它仍然显示 2009 年 4 月 22 日,只是少了几分钟。

该数字似乎不是 FILETIME。它可能是 unix stamp,自 1970 年以来的秒数。在这种情况下,日期将是 2040 年 2 月 20 日,上午 6:13。仅供参考,这些单位今天的日期是 1407649082。

【讨论】:

    猜你喜欢
    • 2017-01-21
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2020-01-11
    • 2014-07-01
    相关资源
    最近更新 更多