c# - 从 DateTime c# 中的 Ticks 获取毫秒数

标签 c# datetime timestamp unix-timestamp

<分区>

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

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

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

但是,当我将它输入到 online converters 之一时为了进行验证,我得到了日期 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.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完全没有。

关于c# - 从 DateTime c# 中的 Ticks 获取毫秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65186616/

相关文章:

php - Mysql 没有将时间戳转换为 PHP 查询的时区

java - 从 DatePicker 和 TimePicker 获取时间戳

c# - Web API 和 .NET 标准

c# - 使用新关键字 'await' 的异步调用

c# - 试图将字符串解析为 DateTime 格式 "02/01/2010"dd/MM/yyyy 而不是 "1/2/2010 MM/dd/yyyy

php 时间戳转 javascript 时间或日期

mysql - 使用重复项选择具有最新时间戳MySQL的行

c# - 如何从共享点列表中获取所有文件夹和项目?

c# - 如何在 Winforms 中制作多语言应用程序?

php - 在 end_date 之后停止显示事件