将Long转换为DateTime会产生错误的值

时间:2019-09-23 06:35:05

标签: c# datetime

我只是尝试将存储为长值的日期转换为DateTime,但是它给了我日期{2/01/0001 7:35:22 PM},而日期应该是{23/09/2019 4:30:23}(GMT +10)

这是初始化对象时创建的长值1569220232761。 这是返回2/01/0001

的代码
SeshStart = new DateTime(CurrentSession.startDate, DateTimeKind.Local);

CurrentSession.startDate等于1569220232761

2 个答案:

答案 0 :(得分:4)

您拥有的是 Unix时间,而不是 Ticks 的数量(数量会大几个数量级)

637,048,098,230,000,0001,569,220,232,761

Unix time

  

Unix时间(也称为Epoch时间,POSIX时间,秒   (因为大纪元或UNIX大纪元时间)是用于描述   一个时间点。这是自从以来经过的秒数   Unix时代,即1970年1月1日世界标准时间00:00:00,

DateTime(Int64)

  

将DateTime结构的新实例初始化为指定的   刻度数。

尝试这样的事情

public static DateTime UnixTimeToDateTime(long unixtime)
{
   var dtDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
   return dtDateTime.AddMilliseconds(unixtime).ToLocalTime();
}

答案 1 :(得分:2)

因为您正在呼叫DateTime(Int64, DateTimeKind) overload且如上所述;

  

参数

     

ticks

     

Int64

     

以100纳秒数表示的日期和时间   自自0001年1月1日在00:00:00.000开始的间隔时间   公历

作为Ticks1569220232761等于Monday, 23 September 2019 06:30:32.761 GTM,您可以准确计算出对How can I convert a Unix timestamp to DateTime and vice versa?问题的解释方式。

另外请注意,在.NET 4.6版本中,引入了两种方法,分别为DateTimeOffset.FromUnixTimeSeconds(Int64)DateTimeOffset.ToUnixTimeSeconds