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()