90 votes

Équivalent de Java System.currentTimeMillis() en C#

Quel est l'équivalent de la méthode Java System.currentTimeMillis() en C# ?

7voto

Joel Coehoorn Points 190579

Nous pourrions également être un peu plus fantaisistes et le faire en tant que méthode d'extension, de sorte qu'il s'accroche à 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);
    }
}

4voto

Cristian Libardo Points 7425

Le cadre ne comprend pas les anciennes secondes (ou millisecondes) depuis 1970. Le plus proche que vous obtenez est DateTime.Ticks qui est le nombre de 100-nanosecondes depuis le 1er janvier 0001.

4voto

gimel Points 30150

Voici une façon simple d'approximer l'horodatage Unix. L'utilisation de UTC est plus proche du concept Unix, et vous devez passer de double a 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);

des empreintes :

millis=1226674125796

4voto

TechCrap Points 375

Je considère que la manière la plus directe d'atteindre ce que vous cherchez à obtenir est la suivante :

DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond

2voto

Aubin Points 6990

Si vous voulez qu'un horodatage soit comparé entre différents processus, différents langages (Java, C, C#), sous GNU/Linux et Windows (Seven au moins) :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X