DateTime的表示以毫秒为单位?

我有一个SQL服务器时间戳,我需要转换成1970年以来的毫秒数的时间表示。我可以用普通的SQL来做到这一点吗? 如果不是的话,我已经将它解压缩到C#中的DateTimevariables中。 是否有可能得到这毫秒表示?

谢谢,
Teja公司。

您可能试图将其转换为类似于UNIX的时间戳,这些时间戳采用UTC:

 yourDateTime.ToUniversalTime().Subtract( new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) ).TotalMilliseconds 

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

在C#中,你可以写

 (long)(date - new DateTime(1970, 1, 1)).TotalMilliseconds 

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

 DateTime yourDateTime; long yourDateTimeMilliseconds = new DateTimeOffset(yourDateTime).ToUnixTimeMilliseconds(); 

正如其他答案中指出的那样,确保yourDateTime具有指定的正确Kind ,或者使用.ToUniversalTime()将其转换为UTC时间。

在这里,您可以了解更多关于DateTimeOffset

 SELECT CAST(DATEDIFF(S, '1970-01-01', SYSDATETIME()) AS BIGINT) * 1000 

这并不能给你完全的精度,但是DATEDIFF(MS...会导致溢出,如果秒数足够好,就应该这样做。

这种隐蔽date时间的其他解决scheme,以unixtimestampmillis C#。

 private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); public static long GetCurrentUnixTimestampMillis() { DateTime localDateTime, univDateTime; localDateTime = DateTime.Now; univDateTime = localDateTime.ToUniversalTime(); return (long)(univDateTime - UnixEpoch).TotalMilliseconds; } 

angular度说约date说明:

date格式为Date对象,毫秒(string或数字)或各种ISO 8601date时间string格式(例如yyyy-MM-ddTHH:mm:ss.sssZ及其较短的版本,如yyyy-MM-ddTHH:mmZ,yyyy-MM -dd或yyyyMMddTHHmmssZ)。 如果在stringinput中没有指定时区,则认为时间在本地时区。

Andomar的答案是将datetime转换为总毫秒。

你应该看下面的链接。

https://docs.angularjs.org/api/ng/filter/date

给定一个DateTime对象,如何获得string格式的ISO 8601date?

使用Andoma的答案,这就是我正在做的

你可以像这样创build一个Struct或者一个Class

 struct Date { public static double GetTime(DateTime dateTime) { return dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds; } public static DateTime DateTimeParse(double milliseconds) { return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(milliseconds).ToLocalTime(); } } 

你可以在你的代码中使用这个如下

 DateTime dateTime = DateTime.Now; double total = Date.GetTime(dateTime); dateTime = Date.DateTimeParse(total); 

我希望这可以帮助你

 Declare @MsPerDay bigint Set @MsPerDay = 86400000 Declare @StartDate datetime Set @StartDate = '19700101' Declare @TargetDate datetime Set @TargetDate = CURRENT_TIMESTAMP Select DateDiff(d,@StartDate,@TargetDate) * @MsPerDay + DateDiff(ms,DateAdd(d,DateDiff(d,0,@TargetDate),0),@TargetDate) 

在伪代码中:

1970-01-01和目标date时间之间的天数乘以每天的毫秒数加上目标date时间的午夜到目标date时间的毫秒数。