相当于Java的 System.currentTimeMillis()
C#中于什么?
Answers:
Java中的一个常见习惯用法是currentTimeMillis()
用于计时或调度目的,您对1970年以来的实际毫秒数不感兴趣,而是计算一些相对值并比较以后的调用currentTimeMillis()
与该值。
如果您要寻找的是C#,则为Environment.TickCount
。
C# give : 2688547
和Java give : 1390707872687
System.currentTimeMillis()
自1970年以来返回以毫秒为单位的UTC时间,而Environment.TickCount
自应用启动以来返回的毫秒数。System.currentTimeMillis()
可以很好地检查经过时间,但是如果您希望两个时长可以比较,则必须使用System.nanoTime()
。
的 System.currentTimeMillis()
java中in返回从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;
}
编辑:根据建议将其设为utc :)
我们还可以花点时间并将其用作扩展方法,以便它挂在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);
}
}
d
未使用参数的值。要使用此代码,您可以编写var date = new DateTime(); var millis = date.currentTimeMillis();
但是date
变量将只是多余的,并且其状态从未使用过。不使用对象的状态时,创建扩展方法只会使代码模糊。@Hath提供的答案更加直接,因此(对我而言)更好。也许@Joel Coehoorn打算使用值d
而不是DateTime.UtcNow
方法主体中的值?我经常使用扩展方法,但并非如此。
该框架不包含自1970年以来的旧秒(或毫秒)。最接近的日期是DateTime.Ticks,它是自0001年1月1日以来的100纳秒数。
我只是考虑如何实现您一直追求的最直接的方法,如下所示:
DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond
DateTime.UtcNow
是更好的选择
如果要在GNU / Linux和Windows(至少七个)下在不同进程,不同语言(Java,C,C#)之间比较时间戳:
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;
}
我知道问题要等价,但由于我将这2个用于在GetTickCount中抛出的相同任务。我可能怀旧,但System.currentTimeMillis()和GetTickCount()是我用来获取报价的唯一工具。
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
// call
uint ticks = GetTickCount();