【问题标题】:C# version of Javascript Date.getTime()Javascript Date.getTime() 的 C# 版本
【发布时间】:2011-12-29 08:51:15
【问题描述】:

在 c# 中获得与 javascript date.gettime() 调用相同的结果的最佳方法是什么?

getTime() 方法返回自 1970 年 1 月 1 日午夜和指定日期以来的毫秒数。

【问题讨论】:

    标签: c# javascript


    【解决方案1】:

    你可以使用这个解决方案:

    private int GetTime()
    {
       var time = (DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1));
       return (int)(time.TotalMilliseconds + 0.5);
    }
    
     
    

    【讨论】:

    • 这行得通,但有一些错别字。忘记了;在倒数第二行,加上你忘记了 st=DateTime 上的“新”。一旦我添加了这些,它就解决了我的问题。谢谢!
    • 当您转换为整数时,+ 0.5 是一种快速四舍五入的方法:)
    • @pratapk 四舍五入结果(+0.5)是否可能导致结果不准确?
    • 转换为 int 是不够的,因为 int 保持在 32 位,但总毫秒数将大于 32 位范围。所以最好投到long
    【解决方案2】:

    由于 JavaScript 时间相对于 UTC,我认为您需要这样的东西:

    var st = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    var t  = (DateTime.Now.ToUniversalTime() - st);
    // t.TotalMilliseconds
    

    现在您可以使用TimespanTotalMilliseconds 属性。

    【讨论】:

      【解决方案3】:

      正确的实现(假设当前时间)如下:

      DateTime utcNow = DateTime.UtcNow;
      DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
      long ts = (long)((utcNow - epoch).TotalMilliseconds);
      

      【讨论】:

        【解决方案4】:

        Java 和 JavaScript Date.getTime() 方法返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。

        自从 .NET 表示自格林威治标准时间 0001 年 1 月 1 日 00:00:00 以来以 Ticks 表示的日期(1 Tick = 0.1 纳秒或 0.0001 毫秒),我们必须使用 转换公式,其中 621355968000000000 是基准日期(以 Ticks 为单位)之间的偏移量,10000 是每个 Ticks 的数量 毫秒。

        Ticks = (MilliSeconds * 10000) + 621355968000000000
        MilliSeconds = (Ticks - 621355968000000000) / 10000
        

        【讨论】:

        • 谢谢;将 new Date().getTime() 从 Javascript 传递到服务器时效果非常好......只需执行 new DateTime(long.Parse(timeSpan)*10000 + 621355968000000000);
        【解决方案5】:

        我想这会成功:)

        public double MilliTimeStamp(DateTime TheDate)
                {
                    DateTime d1 = new DateTime(1970, 1, 1);
                    DateTime d2 = TheDate.ToUniversalTime();
                    TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
        
                    return ts.TotalMilliseconds;
                }
        

        【讨论】:

        • TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);可以简化为TimeSpan ts = d2 - d1;
        【解决方案6】:
        (DateTime.Now - new DateTime (1970, 1, 1)).TotalMilliseconds
        

        【讨论】:

        • 应该是new DateTime(1970, 1, 1)
        • 哦,是的,这是一个奇怪的从零开始的 javascript,不是吗?
        【解决方案7】:

        这是一个基于Enigma State's answer的扩展方法

        public static Int64 GetJavascriptTimeStamp(this DateTime dt)
        {
            var nineteenseventy = new DateTime(1970, 1, 1);
            var timeElapsed = (dt.ToUniversalTime() - nineteenseventy);
            return (Int64)(timeElapsed.TotalMilliseconds + 0.5);
        }
        

        在当前时间使用它:

        var timeStamp = DateTime.Now.GetJavascriptTimeStamp();

        【讨论】:

          【解决方案8】:

          当前接受的答案返回一个不正确的 int。它必须是 Int64 或 long。这只是将 Matt Johnson-Pint(并由 Adaptabi 编辑)提供的正确答案重写为一行。请接受 Matt Johnson-Pint 的回答。我在控制台中根据实际的 javascript new Date().getTime() 检查了它,以验证它返回相同的数字。

          long JavascriptGetTime()
          {
              return (long)DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;            
          }
          

          【讨论】:

            猜你喜欢
            • 2014-05-30
            • 2014-09-09
            • 1970-01-01
            • 1970-01-01
            • 2018-02-16
            • 1970-01-01
            • 1970-01-01
            • 2022-01-20
            • 1970-01-01
            相关资源
            最近更新 更多