Java System.currentTimeMillis () équivalent en C #

Quel est l’équivalent de Java System.currentTimeMillis() en C #?

Une alternative:

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

Un idiome courant en Java consiste à utiliser currentTimeMillis() à des fins de planification ou de programmation, où vous n’êtes pas intéressé par les millisecondes réelles depuis 1970, mais calculez une valeur relative et comparez les invocations ultérieures de currentTimeMillis() .

Si c’est ce que vous recherchez, l’équivalent en C # est Environment.TickCount .

Nous pourrions également obtenir un peu de fantaisie et le faire en tant que méthode d’extension, de manière à ce qu’elle rest en dehors de la classe 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); } } 

Si vous êtes intéressé par TIMING, ajoutez une référence à System.Diagnostics et utilisez un chronomètre.

Par exemple:

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

le System.currentTimeMillis() dans Java renvoie l’heure actuelle en millisecondes à partir du 1/1/1970

c # ce serait

 public static double GetCurrentMilli() { DateTime Jan1970 = new DateTime(1970, 1, 1, 0, 0,0,DateTimeKind.Utc); TimeSpan javaSpan = DateTime.UtcNow - Jan1970; return javaSpan.TotalMilliseconds; } 

edit: fait ça comme suggéré 🙂

Voici un moyen simple d’approcher l’horodatage Unix. Utiliser UTC est plus proche du concept Unix, et vous devez passer du double au 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); 

estampes:

 millis=1226674125796 

Le framework n’inclut pas les anciennes secondes (ou millisecondes) depuis 1970. Le plus proche est DateTime.Ticks qui est le nombre de 100 nanosecondes depuis le 1er janvier 0001.

Je considère simplement la manière la plus simple de réaliser ce que vous vous êtes efforcé de faire comme suit:

 DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond 

Je sais que la question demande l’ équivalent mais depuis que j’utilise ces 2 pour les mêmes tâches que je lance dans GetTickCount . Je suis peut-être nostalgique, mais System.currentTimeMillis () et GetTickCount () sont les seuls que j’utilise pour obtenir des ticks.

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

Si vous voulez comparer un horodatage entre différents processus, différentes langues (Java, C, C #), sous GNU / Linux et Windows (au moins sept):

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; } 
 DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()