在C#中相当于Java System.currentTimeMillis()

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

替代:

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

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

如果这就是你正在寻找的,C#等价物是Environment.TickCount

我们也可以稍微想一下,并将其作为扩展方法,以便挂起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); } } 

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

例如:

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

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

编辑:提出了utcbuild议:)

这是一个简单的方法来近似Unix的时间戳。 使用UTC更接近于unix的概念,你需要从doublelong

 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 

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

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

 DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond 

我知道问题要求等价,但因为我使用这两个相同的任务,我扔在GetTickCount 。 我可能怀旧,但是System.currentTimeMillis()和GetTickCount()是我用来获取滴答的唯一的。

 [DllImport("kernel32.dll")] static extern uint GetTickCount(); // call uint ticks = GetTickCount(); 

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

C#:

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

Java的:

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