C# 将Long转换为DateTime,并给出假值

C# 将Long转换为DateTime,并给出假值,c#,datetime,C#,Datetime,我刚刚尝试将一个存储为长值的日期转换为DateTime,但它给了我日期{2/01/0001 7:35:22 PM},而它应该是{23/09/2019 4:30:23}(GMT+10) 以下是初始化对象时创建的长值156920232761。 下面是返回2/01/0001的代码 SeshStart = new DateTime(CurrentSession.startDate, DateTimeKind.Local); 使用CurrentSession.startDateequal15692023

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

以下是初始化对象时创建的长值
156920232761
。 下面是返回2/01/0001的代码

SeshStart = new DateTime(CurrentSession.startDate, DateTimeKind.Local);
使用
CurrentSession.startDate
equal
156920232761
您拥有的是一个Unix时间,而不是刻度的数量(可能是更大的数量级)

i、 e
6370480982300000000
对应于
156920232761

Unix时间(也称为历元时间、POSIX时间、秒 因为Epoch(或UNIX Epoch-time)是一个用于描述 时间点。它是自之后经过的秒数 Unix时代,即1970年1月1日的UTC时间00:00:00

将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();
}
因为你在打电话,而且如前所述

参数

滴答声

Int64

以100纳秒为单位表示的日期和时间 自0001年1月1日00:00:00.000以来经过的时间间隔 公历

作为一个
Ticks
156920232761
等于
2019年9月23日星期一06:30:32.761 GTM
,您可以准确地计算出您的值


还要注意的是,在.NET 4.6版本中,引入了两种方法作为和。

Dope谢谢!将它添加到我的助手中非常感谢
SeshStart=DataHelpers.DateTimeHelper.DateFromUnixTime(CurrentSession.startDate)向上投票,这是一个非常好的答案,我总是忘记这两种方法,我将不得不更新我的LIB