C# 将ulong FILETIME转换为datetime

C# 将ulong FILETIME转换为datetime,c#,datetime,filetime,C#,Datetime,Filetime,我的程序以ulong格式接收文件时间,我必须将其转换为DateTime格式。这是我写的函数 public static DateTime fileTimeToDateTime(ulong fileTime) { long temp = (long)fileTime; DateTime dt1 = DateTime.FromFileTime(temp); return dt1; } 但是对于filetime2213360000,函数返回1/1/1601 12:00:00

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

public static DateTime fileTimeToDateTime(ulong fileTime)
{
    long temp = (long)fileTime;
    DateTime dt1 = DateTime.FromFileTime(temp);
    return dt1;
}
但是对于filetime
2213360000
,函数返回
1/1/1601 12:00:00 AM
,但是正确的应该是
4/22/2009 3:28:29 PM
,因此我使用它将filetime转换为人类可读的时间,并给出正确的值。看来我的函数有问题。然后我使用这段代码转换正确的日期

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

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

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

2213360000 100纳秒的间隔约为0.02秒


现在要看的是你的
FILETIME
是从哪里来的,或者你是否误解了这个方法的用途。你能用代码给你的方法更新你的问题吗?

< P>你是否考虑到从你的链接中的转换器被破坏的可能性?如果你将这个数字减少九个数量级,输入2而不是2213360000,然后让它转换,它仍然显示2009年4月22日,只少几分钟


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

此文件时间是从另一家公司提供的DLL中获取的。但是你看到的网页给了我正确的日期和时间。所以,应该有一种方法来获取它。你需要看看那个网站是以什么格式阅读它的。这绝对不是2009年的
FILETIME
。只是一个猜测,但它的精确度可能不如完整的文件时间。乘以10的某个幂可能会得到“正确”的结果。不过,如果您能够从源代码中验证您收到的值的确切含义,那将是最好的。