ticks tick online c# java

online - datetime ticks c#



C#DateTime.Ticks equivalentes en Java (5)

Base sobre Jon Skeet. Desarrollé esta clase.

import java.util.Calendar; import java.util.Date; public class DateHelper { private static final long TICKS_AT_EPOCH = 621355968000000000L; private static final long TICKS_PER_MILLISECOND = 10000; public static long getUTCTicks(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return (calendar.getTimeInMillis() * TICKS_PER_MILLISECOND) + TICKS_AT_EPOCH; } public static Date getDate(long UTCTicks){ return new Date((UTCTicks - TICKS_AT_EPOCH) / TICKS_PER_MILLISECOND); } }

Esto funciona para mi

¿Cuál es el equivalente de Java de DateTime.Ticks en C #?

DateTime dt = new DateTime(2010, 9, 14, 0, 0, 0); Console.WriteLine("Ticks: {0}", dt.Ticks);

¿Cuál será el equivalente del código mencionado anteriormente en Java?


Bueno, java.util.Date/Calendar solo tiene precisión hasta el milisegundo:

Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MILLISECOND, 0); // Clear the millis part. Silly API. calendar.set(2010, 8, 14, 0, 0, 0); // Note that months are 0-based Date date = calendar.getTime(); long millis = date.getTime(); // Millis since Unix epoch

Ese es el equivalente efectivo más cercano. Si necesita convertir entre un valor de tics de .NET y una Date / Calendar , básicamente necesita realizar la escala (tics a milis) y la compensación (del 1 de enero al 1 de enero de 1970).

Las API de fecha y hora incorporadas de Java son bastante desagradables. Personalmente recomiendo que uses Joda Time en su lugar. Si pudieras decir lo que realmente intentas hacer, podemos ayudarte más.

EDITAR: Bueno, aquí hay un código de ejemplo:

import java.util.*; public class Test { private static final long TICKS_AT_EPOCH = 621355968000000000L; private static final long TICKS_PER_MILLISECOND = 10000; public static void main(String[] args) { long ticks = 634200192000000000L; Date date = new Date((ticks - TICKS_AT_EPOCH) / TICKS_PER_MILLISECOND); System.out.println(date); TimeZone utc = TimeZone.getTimeZone("UTC"); Calendar calendar = Calendar.getInstance(utc); calendar.setTime(date); System.out.println(calendar); } }

Tenga en cuenta que esto construye una Fecha / Calendario que representa el instante UTC de 2019/9/14. La representación de .NET es un tanto borrosa: puede crear dos valores de DateTime que son iguales excepto por su "clase" (pero, por lo tanto, representan instantes diferentes) y reclamarán ser iguales. Es un poco desordenado :(


En Java es:

long TICKS_AT_EPOCH = 621355968000000000L; long tick = System.currentTimeMillis()*10000 + TICKS_AT_EPOCH;


Para convertir .Net Ticks a milis en java usa esto:

static final long TICKS_PER_MILLISECOND = 10000; long ticks = 450000000000L; // sample tick value long millis = (ticks / TICKS_PER_MILLISECOND);


System.nanoTime () te da nanosegundos en Java (desde 1.6). Aún deberá cambiar / volver a escalar, pero no se perderá precisión.