【问题标题】:ASP.NET: Get milliseconds since 1/1/1970ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数
【发布时间】:2011-08-06 12:38:40
【问题描述】:

我有一个 ASP.NET、VB.NET 日期,我试图获取自 1970 年 1 月 1 日以来的毫秒数。我尝试在 MSDN 中寻找一种方法,但找不到任何东西。有谁知道怎么做?

【问题讨论】:

    标签: c# asp.net vb.net date utc


    【解决方案1】:

    您可以减去任意两个 DateTime 实例并得到 TimeSpanTotalMilliseconds 将给您总毫秒数。示例如下。

        DateTime dt1970 = new DateTime(1970, 1, 1);
        DateTime current = DateTime.Now;//DateTime.UtcNow for unix timestamp
        TimeSpan span = current - dt1970;
        Console.WriteLine(span.TotalMilliseconds.ToString());
    

    一个班轮

    //DateTime.MinValue is 01/01/01 00:00 so add 1969 years. to get 1/1/1970
    DateTime.Now.Subtract(DateTime.MinValue.AddYears(1969)).TotalMilliseconds;
    

    【讨论】:

      【解决方案2】:

      从 .NET 4.6 开始,ToUnixTimeMilliseconds 方法提供了更准确的解决方案。

      来自DateTimeOffset

      DateTimeOffset.Now.ToUnixTimeMilliseconds()
      

      来自DateTime

      new DateTimeOffset(dateTime).ToUnixTimeMilliseconds()
      

      来源:https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset.tounixtimemilliseconds?view=netframework-4.6#System_DateTimeOffset_ToUnixTimeMilliseconds

      【讨论】:

      • 我喜欢DateTimeOffset 解决方案! :)
      【解决方案3】:

      或者,您可以使用 Ticks 属性并避免构建临时对象:

      long epochTime = (DateTime.UtcNow.Ticks - 621355968000000000) / 10000;
      

      然而,这并不完全

      推理:

      DateTime d = new DateTime(1970, 01, 01);
      var temp = d.Ticks; // == 621355968000000000
      

      【讨论】:

        【解决方案4】:

        这将以毫秒为单位提供 UNIX 纪元。 (尊重 UTC 时间而不是您的本地时间)

        Split(DateTime.UtcNow.Subtract(DateTime.MinValue.AddYears(1969)).TotalMilliseconds(), ".", 2)(0)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-19
          • 2012-02-19
          • 2010-12-29
          • 2019-12-10
          • 1970-01-01
          • 2012-10-07
          • 1970-01-01
          • 2014-02-20
          相关资源
          最近更新 更多