我只是尝试将存储为长值的日期转换为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
。
答案 0 :(得分:4)
您拥有的是 Unix时间,而不是 Ticks 的数量(数量会大几个数量级)
即637,048,098,230,000,000
与1,569,220,232,761
Unix时间(也称为Epoch时间,POSIX时间,秒 (因为大纪元或UNIX大纪元时间)是用于描述 一个时间点。这是自从以来经过的秒数 Unix时代,即1970年1月1日世界标准时间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();
}
答案 1 :(得分:2)
因为您正在呼叫DateTime(Int64, DateTimeKind)
overload且如上所述;
参数
ticks
Int64
以100纳秒数表示的日期和时间 自自0001年1月1日在00:00:00.000开始的间隔时间 公历。
作为Ticks
,1569220232761
等于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
。