从DateTimec#中的刻度中获取毫秒数
c#
我有一个简单的 DateTime 对象,等于 date: 11/1/2020 8:11:14 AM。
我想将它转换成毫秒,所以我做的:
myTimestamp?.Ticks / TimeSpan.TicksPerMillisecond。
我得到63739786274788,从纯计算的角度来看,这似乎是正确的。
但是,当我将它输入到其中一个在线转换器进行验证时,我得到了 date Wed Nov 01 3989 01:11:14,这当然是很遥远的。
问题:
63739786274788如果不是以毫秒为单位的时间,这个数字是多少?- 如何以毫秒为单位获得“正常”时间戳?
回答
在 .NET 中,DateTime刻度基于0001-01-01T00:00:00.0000000. 该.Kind属性用于确定是 UTC、本地时间还是“未指定”。
大多数在线转换器,例如您链接到的转换器,都需要Unix Timestamp,其中的值基于1970-01-01T00:00:00.000Z. 它始终基于 UTC。(精度各不相同,通常使用秒和毫秒。)
如果您想从 .NET 获得基于毫秒的 Unix 时间戳,您应该使用内置函数DateTimeOffset.FromUnixTimeMilliseconds和DateTimeOffset.ToUnixTimeMilliseconds. (这些函数也有基于秒的版本。)
假设您的输入值是基于 UTC 的:
DateTime dt = new DateTime(2020, 11, 1, 8, 11, 14, DateTimeKind.Utc);
DateTimeOffset dto = new DateTimeOffset(dt);
long timestamp = dto.ToUnixTimeMilliseconds();
// output: 1604218274000
DateTimeKind.Local假设您的值确实基于计算机的本地时区,也可以使用此方法。 DateTimeKind.Unspecified有点棘手,因为您需要首先DateTimeOffset使用特定时区转换为TimeZoneInfo。
您也可以DateTimeOffset直接构造值,而不是完全通过DateTime。