with way now net example best c# java .net datetime

way - Java System.currentTimeMillis() equivalente en C#



datetime net core (11)

¿Cuál es el equivalente de System.currentTimeMillis() de Java en C #?


Aquí hay una forma simple de aproximar la marca de tiempo de Unix. El uso de UTC está más cerca del concepto de Unix, y debe codificar 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);

huellas dactilares:

millis=1226674125796


El marco no incluye los segundos antiguos (o milisegundos) desde 1970. Lo más parecido que se puede obtener es DateTime.Ticks, que es el número de 100 nanosegundos desde el 1 de enero de 0001.


Sé que la pregunta pide un equivalente, pero como utilizo esos 2 para las mismas tareas, GetTickCount . Puede que tenga nostalgia, pero System.currentTimeMillis () y GetTickCount () son los únicos que uso para obtener tics.

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


Si desea comparar una marca de tiempo entre diferentes procesos, diferentes idiomas (Java, C, C #), bajo GNU / Linux y Windows (al menos siete):

DO#:

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


Si está interesado en TIEMPO, agregue una referencia a System.Diagnostics y use un cronómetro.

Por ejemplo:

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


Simplemente considero la forma más directa de lograr lo que has estado luchando de la siguiente manera:

DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond


También podríamos obtener un poco de fantasía y hacerlo como un método de extensión, para que cuelgue de la clase 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); } }


Una alternativa:

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


Una expresión común en Java es utilizar el currentTimeMillis() para el tiempo o los propósitos de programación, donde no está interesado en los milisegundos reales desde 1970, sino que calcula algún valor relativo y compara las invocaciones posteriores de currentTimeMillis() a ese valor.

Si eso es lo que está buscando, el equivalente de C # es Environment.TickCount .


el System.currentTimeMillis() en java devuelve la hora actual en milisegundos a partir del 1/1/1970

c # que sería

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

editar: lo hizo utc como se sugiere :)


DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()