Programing

C #에서 Java System.currentTimeMillis ()에 해당

lottogame 2020. 9. 23. 08:05
반응형

C #에서 Java System.currentTimeMillis ()에 해당


System.currentTimeMillis()C #에서 Java와 동등한 것은 무엇입니까 ?


대안:

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.


타이밍에 관심이있는 경우 System.Diagnostics에 대한 참조를 추가하고 스톱워치를 사용하십시오.

예를 들면 :

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

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

편집 : 제안대로 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);
    }
}

다음은 Unix 타임 스탬프를 근사화하는 간단한 방법입니다. UTC를 사용하면 유닉스 개념에 가까운, 당신은에서 은밀한 필요 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

DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()

프레임 워크는 1970 년 이후의 이전 초 (또는 밀리 초)를 포함하지 않습니다. 가장 가까운 값은 0001 년 1 월 1 일 이후 100 나노초 수인 DateTime.Ticks입니다.


나는 당신이 노력해 온 것을 달성하는 가장 직접적인 방법을 다음과 같이 고려합니다.

DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond

GNU / Linux 및 Windows (최소 7 개 이상)에서 서로 다른 프로세스, 서로 다른 언어 (Java, C, C #)간에 타임 스탬프를 비교하려는 경우 :

씨#:

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

자바:

java.lang.System.nanoTime();

C GNU / 리눅스 :

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

I know question asks for equivalent but since I use those 2 for the same tasks I throw in GetTickCount. I might be nostalgic but System.currentTimeMillis() and GetTickCount() are the only ones I use for getting ticks.

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

// call
uint ticks = GetTickCount();

참고URL : https://stackoverflow.com/questions/290227/java-system-currenttimemillis-equivalent-in-c-sharp

반응형