在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的概念,你需要从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
该框架不包括自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; }