DateTime的表示以毫秒为单位?
我有一个SQL服务器时间戳,我需要转换成1970年以来的毫秒数的时间表示。我可以用普通的SQL来做到这一点吗? 如果不是的话,我已经将它解压缩到C#中的DateTime
variables中。 是否有可能得到这毫秒表示?
谢谢,
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时间的毫秒数。