DateTime的表示以毫秒为单位?

时间:2011-05-10 20:13:08

标签: c# sql-server datetime

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

谢谢,
的Teja。

8 个答案:

答案 0 :(得分:116)

您可能正在尝试转换为类似UNIX的时间戳,这些时间戳采用UTC格式:

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

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

答案 1 :(得分:60)

在C#中,你可以写

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

答案 2 :(得分:20)

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

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

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

Here您可以详细了解DateTimeOffset

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

此另一个解决方案是将隐藏日期时间改为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;
} 

答案 5 :(得分:1)

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

您可以像这样创建一个Struct或类

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);

我希望这可以帮到你

答案 6 :(得分:1)

DemTimeExtensions 类中有ToUnixTime()ToUnixTimeMs()方法

DateTime.UtcNow.ToUnixTimeMs()

答案 7 :(得分:0)

angular说date parater:

  

格式化日期对象,毫秒(字符串或数字)的日期   或各种ISO 8601日期时间字符串格式(例如   yyyy-MM-ddTHH:mm:ss.sssZ及其较短的版本   yyyy-MM-ddTHH:mmZ,yyyy-MM-dd或yyyyMMddTHHmmssZ)。如果没有时区   在字符串输入中指定,时间被认为是在   当地时区。

Andomar的答案是将日期时间转换为总毫秒数。

您应该查看以下链接。

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

Given a DateTime object, how do I get an ISO 8601 date in string format?