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

时间:2008-11-14 14:30:43

标签: c# java .net datetime

C#中的Java System.currentTimeMillis()相当于什么?

11 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:66)

Java中常见的习惯用法是使用currentTimeMillis()进行计时或调度,你对自1970年以来的实际毫秒数不感兴趣,而是计算一些相对值并比较{{1到那个值。

如果您正在寻找,那么C#的等价物是 currentTimeMillis()

答案 2 :(得分:10)

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

例如:

var sw = Stopwatch.StartNew();
...
var elapsedStage1 = sw.ElapsedMilliseconds;
...
var elapsedStage2 = sw.ElapsedMilliseconds;
...
sw.Stop();

答案 3 :(得分:7)

java中的System.currentTimeMillis()返回从1970年1月1日起的当前时间(以毫秒为单位)

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;
    }

编辑:按照建议启用它:)

答案 4 :(得分: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);
    }
}

答案 5 :(得分:4)

这是一种近似Unix时间戳的简单方法。 使用UTC更接近unix概念,您需要从double转换为long

TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
long millis = (long)ts.TotalMilliseconds;
Console.WriteLine("millis={0}", millis);

打印:

millis=1226674125796

答案 6 :(得分:3)

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

答案 7 :(得分:3)

我只是考虑如何实现你一直在努力的最直接的方式如下:

DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond

答案 8 :(得分:3)

DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()

答案 9 :(得分:1)

我知道问题要求等效但是因为我将这些2用于我投入GetTickCount的相同任务。我可能怀旧,但System.currentTimeMillis()和GetTickCount()是我用来获取刻度的唯一。

[DllImport("kernel32.dll")]
static extern uint GetTickCount();

// call
uint ticks = GetTickCount();

答案 10 :(得分:1)

如果你想在不同的进程,不同的语言(Java,C,C#)之间比较时间戳,在GNU / Linux和Windows下(至少七个):

C#:

private static long nanoTime() {
   long nano = 10000L * Stopwatch.GetTimestamp();
   nano /= TimeSpan.TicksPerMillisecond;
   nano *= 100L;
   return nano;
}

爪哇:

java.lang.System.nanoTime();

C GNU / Linux:

static int64_t hpms_nano() {
   struct timespec t;
   clock_gettime( CLOCK_MONOTONIC, &t );
   int64_t nano = t.tv_sec;
   nano *= 1000;
   nano *= 1000;
   nano *= 1000;
   nano += t.tv_nsec;
   return nano;
}

C Windows:

static int64_t hpms_nano() {
   static LARGE_INTEGER ticksPerSecond;
   if( ticksPerSecond.QuadPart == 0 ) {
      QueryPerformanceFrequency( &ticksPerSecond );
   }
   LARGE_INTEGER ticks;
   QueryPerformanceCounter( &ticks );
   uint64_t nano = ( 1000*1000*10UL * ticks.QuadPart ) / ticksPerSecond.QuadPart;
   nano *= 100UL;
   return nano;
}