DateTime的表示以毫秒为单位?

Tej*_*udi 68 c# sql-server datetime

我有一个SQL服务器时间戳,我需要将其转换为自1970年以来以毫秒为单位的时间表示.我可以使用纯SQL执行此操作吗?如果没有,我将它提取到DateTimeC#中的变量中.是否有可能获得毫米级的代表?

谢谢,
Teja.

And*_*mar 128

您可能正在尝试转换为类似UNIX的时间戳,它们是UTC:

yourDateTime.ToUniversalTime().Subtract(
    new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
    ).TotalMilliseconds
Run Code Online (Sandbox Code Playgroud)

这也避免了夏季问题,因为UTC没有这些问题.

  • 这给出了一个分数作为输出,例如:“1552678714362.79”“.79”从哪里来? (2认同)
  • @SharifYazdian 这正是您所期望的,它是 0.79 毫秒。系统时间以滴答为单位。鉴于 1 毫秒有 10000 个滴答声,“DateTime”和“TimeSpan”以比整毫秒更高的精度存储它们的值。0.79 毫秒 = 7900 个滴答声。如果你需要一个整数,你可以使用`long ms = myTimeSpan.TotalTicks / 10000;`。 (2认同)
  • 在 .NET Core (>2.1) 中,您可以使用 `DateTime.UnixEpoch` 而不是声明日期。 (2认同)

SLa*_*aks 64

在C#中,你可以写

(long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用强制转换为`long`而不是`int` :) (13认同)
  • `new DateTime(1970,1,1).AddMilliseconds(myDateAsALong);`如果你想走另一条路. (4认同)
  • @Roxy'Pro:`int.MaxValue`(以毫秒为单位)大约是 25 天。这不太可能有用。 (4认同)

Bob*_*Bob 23

从.NET 4.6开始,您可以使用DateTimeOffset对象获取unix毫秒.它有一个构造函数,它接受一个DateTime对象,所以你可以传入你的对象,如下所示.

DateTime yourDateTime;
long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds();
Run Code Online (Sandbox Code Playgroud)

如其他答案中所述,请确保指定yourDateTime了正确的Kind,或者先使用.ToUniversalTime()它将其转换为UTC时间.

在这里你可以了解更多DateTimeOffset.

  • 根据 [MSDN](https://msdn.microsoft.com/en-us/library/system.datetimeoffset.tounixtimemilliseconds(v=vs.110).aspx),`ToUnixTimeMilliseconds()` 自 .NET 4.6 起可用 (2认同)