¿Cuál es el equivalente de Java System.currentTimeMillis()en C #?
Respuestas:
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;
}
Un modismo común en Java es usar el currentTimeMillis()para propósitos de sincronización o programación, donde no está interesado en los milisegundos reales desde 1970, sino que calcula algún valor relativo y compara las invocaciones posteriores currentTimeMillis()con ese valor.
Si eso es lo que está buscando, el equivalente de C # es Environment.TickCount.
C# give : 2688547yJava give : 1390707872687
System.currentTimeMillis()devuelve la hora UTC en ms desde 1970, mientras que Environment.TickCountdevuelve ms desde que se inició la aplicación. System.currentTimeMillis()es bueno para verificar el tiempo transcurrido, pero si desea que dos duraciones sean comparables, debe usar System.nanoTime().
DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
DateTimeOffsetmétodo se introdujo a partir de .Net 4.6.
el System.currentTimeMillis()en java devuelve la hora actual en milisegundos desde 1/1/1970
c # eso 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 :)
También podríamos ponernos un poco elegantes 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);
}
}
dno se utiliza el valor del parámetro . Para usar este código, podría escribir var date = new DateTime(); var millis = date.currentTimeMillis();Pero la datevariable sería redundante y su estado nunca se usaría. Cuando no se usa el estado del objeto, la creación de un método de extensión solo oscurece el código. La respuesta proporcionada por @Hath es más sencilla y, por lo tanto, mejor (para mí). ¿Quizás @Joel Coehoorn tenía la intención de usar el valor en dlugar del DateTime.UtcNowcuerpo del método? Utilizo mucho métodos de extensión, pero no para esto.
A continuación, se muestra una forma sencilla de aproximar la marca de tiempo de Unix. El uso de UTC está más cerca del concepto de Unix, y necesita cambiar de doublea 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 viejos segundos (o milisegundos) desde 1970. Lo más cercano que obtiene es DateTime.Ticks, que es el número de 100 nanosegundos desde el 1 de enero de 0001.
Solo considero la forma más sencilla de lograr lo que ha estado luchando de la siguiente manera:
DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond
DateTime.UtcNowes una mejor opción
Si desea comparar una marca de tiempo entre diferentes procesos, diferentes lenguajes (Java, C, C #), bajo GNU / Linux y Windows (siete al menos):
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;
}
Sé que la pregunta solicita el equivalente, pero como uso esos 2 para las mismas tareas, lanzo GetTickCount . Puede que sea nostálgico, pero System.currentTimeMillis () y GetTickCount () son los únicos que uso para obtener tics.
[DllImport("kernel32.dll")]
static extern uint GetTickCount();
// call
uint ticks = GetTickCount();