C# 从Windows文件时间转换为日期时间

C# 从Windows文件时间转换为日期时间,c#,.net,datetime,time,C#,.net,Datetime,Time,我有一个时间戳,其值为63487648800000000,预期日期为2012年11月4日18:00:00。但当我转换它时,年份是3612,而不是2012(日期、月份和时间都是正确的) 以下是一个例子: Console.WriteLine(DateTime.FromFileTimeUtc(634876488000000000).ToString()); Console.WriteLine(DateTime.FromFileTime(634876488000000000).ToString());

我有一个时间戳,其值为
63487648800000000
,预期日期为
2012年11月4日18:00:00
。但当我转换它时,年份是
3612
,而不是
2012
(日期、月份和时间都是正确的)

以下是一个例子:

Console.WriteLine(DateTime.FromFileTimeUtc(634876488000000000).ToString());
Console.WriteLine(DateTime.FromFileTime(634876488000000000).ToString());
以及输出:

3612年11月4日18:00:00
3612年11月4日18:00:00

经过进一步研究,我发现如果我在Powershell中使用
Get Date 63487648800000000
,我会得到正确的预期日期
2012年11月4日18:00:00


有谁能解释一下如何使用C#please将时间戳正确地转换为.NET DateTime对象吗?

我的第一个猜测是,这个数字是,在Visual studio中尝试了以下方法,我得到了<代码>{04/11/2012 6:00:00 PM}用于:

DateTime dt = DateTime.MinValue.AddTicks(634876488000000000);
或者使用以记号为参数的

DateTime dt = new DateTime(634876488000000000);
您可以使用DateTime(长刻度)构造函数获取正确的日期:

Console.WriteLine((new DateTime(634876488000000000)).ToString());
正确的Windows FILETIME是自1601年1月1日午夜UTC以来的滴答声数。也就是说,
1601-01-01T00:00:00Z
。这似乎不是你所拥有的。这就是为什么你会在1601年前离开

您似乎拥有自0001年1月1日午夜以来的滴答声数。这就是
getdate
使用的全部内容,这就是DateTime的单整数构造函数使用的内容

DateTime ntepoch = new DateTime(1601,1,1,0,0,0,DateTimeKind.Utc); // Ticks is 504911232000000000
Console.WriteLine(DateTime.FromFileTimeUtc(634876488000000000 - ntepoch.Ticks));
Console.WriteLine(DateTime.FromFileTime(634876488000000000 - ntepoch.Ticks));
Console.WriteLine(new DateTime(634876488000000000)));
对我来说,在时区GMT-5中,这将输出:

11/4/2012 6:00:00 PM
11/4/2012 1:00:00 PM
11/4/2012 6:00:00 PM
ToString()
不是多余的吗。。?