从DateTimec#中的刻度中获取毫秒数

c#

我有一个简单的 DateTime 对象,等于 date: 11/1/2020 8:11:14 AM

我想将它转换成毫秒,所以我做的:
myTimestamp?.Ticks / TimeSpan.TicksPerMillisecond

我得到63739786274788,从纯计算的角度来看,这似乎是正确的。

但是,当我将它输入到其中一个在线转换器进行验证时,我得到了 date Wed Nov 01 3989 01:11:14,这当然是很遥远的。

问题:

  1. 63739786274788如果不是以毫秒为单位的时间,这个数字是多少?
  2. 如何以毫秒为单位获得“正常”时间戳?

回答

在 .NET 中,DateTime刻度基于0001-01-01T00:00:00.0000000. 该.Kind属性用于确定是 UTC、本地时间还是“未指定”。

大多数在线转换器,例如您链接到的转换器,都需要Unix Timestamp,其中的值基于1970-01-01T00:00:00.000Z. 它始终基于 UTC。(精度各不相同,通常使用秒和毫秒。)

如果您想从 .NET 获得基于毫秒的 Unix 时间戳,您应该使用内置函数DateTimeOffset.FromUnixTimeMillisecondsDateTimeOffset.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


以上是从DateTimec#中的刻度中获取毫秒数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>