C#中的Java System.currentTimeMillis()等效

82 .net c# java datetime

System.currentTimeMillis()C#中Java的等价物是什么?

Jon*_*eet 88

替代:

private static readonly DateTime Jan1st1970 = new DateTime
    (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);

public static long CurrentTimeMillis()
{
    return (long) (DateTime.UtcNow - Jan1st1970).TotalMilliseconds;
}
Run Code Online (Sandbox Code Playgroud)

  • 与“DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()”相同的结果 (2认同)
  • @PeterL:但遗憾的是 .NET Framework 中没有:( (2认同)

Bar*_*end 68

Java中常见的习惯用法是currentTimeMillis()用于计时或调度目的,你对自1970年以来的实际毫秒数不感兴趣,而是计算一些相对值并比较以后currentTimeMillis()对该值的调用.

如果这就是你要找的东西,那么等效的C#就是Environment.TickCount.


小智 12

如果您对TIMING感兴趣,请添加对System.Diagnostics的引用并使用秒表.

例如:

var sw = Stopwatch.StartNew();
...
var elapsedStage1 = sw.ElapsedMilliseconds;
...
var elapsedStage2 = sw.ElapsedMilliseconds;
...
sw.Stop();
Run Code Online (Sandbox Code Playgroud)


Hat*_*ath 8

System.currentTimeMillis()Java中返回从1/1/1970以毫秒为单位的当前时间

c#将是

public static double GetCurrentMilli()
    {
        DateTime Jan1970 = new DateTime(1970, 1, 1, 0, 0,0,DateTimeKind.Utc);
        TimeSpan javaSpan = DateTime.UtcNow - Jan1970;
        return javaSpan.TotalMilliseconds;
    }
Run Code Online (Sandbox Code Playgroud)

编辑:按建议制作utc :)

  • DateTime.Now使用本地时间,而不是UTC.我不确切地知道当你从本地的DateTime中减去一个未知类型的DateTime时会发生什么,但是最好将它们都设置为UTC :) (4认同)

Joe*_*orn 7

我们也可以稍微看一下它作为扩展方法,以便它挂起DateTime类:

public static class DateTimeExtensions
{
    private static DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    public static long currentTimeMillis(this DateTime d)
    {
        return (long) ((DateTime.UtcNow - Jan1st1970).TotalMilliseconds);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这有点不对吗?此扩展方法将传递给DateTime的任何*instance*,但它不使用该实例.只是看起来令人困惑......我认为你不应该要求你不使用的参数 (2认同)
  • @mortb这是一个扩展方法。这就是 C# 中如何定义“向类添加方法”而不修改类的方式。编译器解释该方法并可以将其应用于“this”参数的实例,就像它是类本身的实例方法一样。它的功能与静态类上的方法相同,但编译器允许编写更简单的替代语法。 (2认同)
  • 问题是没有使用参数“d”的值。要使用此代码,您可以编写 `var date = new DateTime(); var millis = date.currentTimeMillis();` 但是 `date` 变量只是多余的,并且它的状态从未被使用过。当不使用对象的状态时,创建扩展方法只会使代码变得模糊。@Hath 提供的答案更直接,因此更好(对我来说)。也许 @Joel Coehoorn 打算在方法主体中使用值“d”而不是“DateTime.UtcNow”?我经常使用扩展方法,但不是为了这个。 (2认同)

Ram*_*nas 5

DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
Run Code Online (Sandbox Code Playgroud)


Cri*_*rdo 4

该框架不包括自 1970 年以来的旧秒(或毫秒)。您获得的最接近的是 DateTime.Ticks,它是自 0001 年 1 月 1 日以来的 100 纳秒数。