【问题标题】:new Date().getTime() in .NET.NET 中的新 Date().getTime()
【发布时间】:2011-02-10 14:31:50
【问题描述】:

基本上我想在 .NET 中执行以下操作,但我不知道该怎么做。

var d = new Date().getTime() + " milliseconds since 1970/01/01"

【问题讨论】:

  • 我看到的 6 个答案,包括您接受的答案使用 DateTime.Now 而不是 DateTime.UtcNow。我相信这将导致您的计算在美国超过半年的时间里出现 +3,600,000 毫秒的错误。这种差异在您的特定情况下可能无关紧要,但需要注意。
  • 实际上,在美国当地时间内,错误将永远不止于此,因为无论 DST 是否有效,所有时区都远离 GMT/UTC。所以,你是对的,一个必须使用 DateTime.UtcNow。

标签: .net datetime


【解决方案1】:

我不确定您是否可以在 .NET 中获取 UNIX 日期,但您可以使用 DateTime.Now 作为 new Date()(或 new DateTime())的等价物

正如您在评论中看到的那样,可以通过执行以下操作来获取 TimeSpan 对象...

(第一个答案)

DateTime.Now.Subtract(new DateTime(1970,1,1)).TotalMilliseconds

为了人类,添加最终结果...

var d = DateTime.Now.Subtract(new DateTime(1970,1,1).ToUniversalTime()).TotalMilliseconds + " milliseconds since 1970/01/01";

附:当我们需要他时,Jon Skeet 知道时间在哪里:P

【讨论】:

  • 爱约翰·斯基特战斗的呼救声:D
  • 只是想注意你也应该转换为UTC
【解决方案2】:

你会做这样的事情......

var ts = DateTime.UtcNow - new DateTime(1970,1,1);
var result = String.Format("{0} milliseconds since 1970/01/01", ts.TotalMilliseconds);

【讨论】:

  • 谢谢!我完全忘记了减法。我找不到 TotalMilliseconds 并停留在毫秒。
  • 只是想注意你也应该使用 UTC 时间。
  • 所以10年后我们还在用new DateTime(1970,1,1)??
【解决方案3】:

减法是一种方法,但到目前为止我看到的所有响应都没有正确调整为 UTC。

你想要这样的东西:

var ts = DateTime.UtcNow - new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc); 
var result = String.Format("{0} milliseconds since 1970/01/01", ts.TotalMilliseconds);

【讨论】:

    【解决方案4】:

    前段时间我为自己写了一个扩展方法。

    它是这样使用的:

     double ticks = DateTime.UtcNow.UnixTicks();
    

    实施:

     public static class ExtensionMethods
     {
      // returns the number of milliseconds since Jan 1, 1970 
                    // (useful for converting C# dates to JS dates)
      public static double UnixTicks(this DateTime dt)
      {
       DateTime d1 = new DateTime(1970, 1, 1);
       DateTime d2 = dt.ToUniversalTime();
       TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
    
       return ts.TotalMilliseconds;
      }
     }
    

    【讨论】:

    • 您的示例无法编译。也许你的意思是double ticks = DateTime.UtcNow.UnixTicks();
    【解决方案5】:

    您可以通过DateTimeTimeSpan 结构通过DateTime.Subtract 到达那里,例如:

    TimeSpan ts = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1));
    ts.TotalMilliseconds; // ...since The Epoch
    

    【讨论】:

    • 您可能应该使用DateTime.UtcNow 或者在进行减法之前将时间转换为UTC。
    【解决方案6】:

    怎么样

    var s = string.format("{0}  milliseconds since 1970/01/01",
               (DateTime.Now - DateTime.Parse("1970/01/01")).TotalMilliseconds);
    

    【讨论】:

    • 为什么要将日期硬编码为字符串?另外,你真的应该在 UTC 中进行计算。
    【解决方案7】:

    我在胡闹,看到了这个例子,但最终将其修改为:

    var st = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).ToFileTimeUtc();
                var t = (DateTime.UtcNow.ToFileTimeUtc());
                Debug.WriteLine(t - st);
    

    会给出一个类似 16202######## 的数字

    【讨论】:

      【解决方案8】:
      DateTime dt = new DateTime();
      dt = DateTime.Now;
      TimeSpan dtNow = new TimeSpan();
      dtNow = dt.Subtract(new DateTime(1970, 1, 1));
      Console.WriteLine(dtNow.TotalMilliseconds);
      

      与其他人相比有点啰嗦,但它确实有效。

      【讨论】:

      • 您应该使用DateTime.UtcNow,否则请致电dt.ToUniversalTime()。此外,您还有两个多余的构造函数调用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 2020-01-12
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多