繁体   English   中英

C# 版本 Javascript Date.getTime()

[英]C# version of Javascript Date.getTime()

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

getTime() 方法返回从 1970 年 1 月 1 日午夜到指定日期的毫秒数。

您可以使用此解决方案:

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

 

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

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

现在您可以使用TimespanTotalMilliseconds属性。

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

由于 .NET 以 Ticks 表示日期(1 Tick = 0.1 纳秒或 0.0001 毫秒),自 1 Jan 0001 00:00:00 GMT 起,我们必须使用转换公式,其中 621355968000000000 是 Ticks 中的基准日期和 1000每毫秒滴答数。

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

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

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

我想这会解决问题:)

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;
        }
(DateTime.Now - new DateTime (1970, 1, 1)).TotalMilliseconds

这是基于Enigma State 答案的扩展方法

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

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

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

现在在 C# 中,您可以使用内置的 function:

new DateTimeOffset(Your_DateTime_Variable_Here).ToUnixTimeMilliseconds()

所以示例代码将是:

var dateToUse = DateTime.Now;
var javaGetTimeValue = new DateTimeOffset(dateToUse).ToUnixTimeMilliseconds()
private static ulong GetTime()
{
    const long INIT_DATA_TICKS = 621355968000000000; // 1.1.1970 in ticks
    const double ROUNDINGS_FIX = 0.5;
    TimeSpan dTicks = new TimeSpan(DateTime.UtcNow.Ticks - INIT_DATA_TICKS);
    return (ulong)(dTicks.TotalMilliseconds + ROUNDINGS_FIX);
}

DateTime.Now.ToUniversalTime() 使用实习生 DateTime.UtcNow

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM