Bueno, java.util.Date/Calendar suficiente precisión a la milésima de segundo:
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
Eso es el equivalente más cercano efectiva. Si necesita convertir entre un valor de .NET ticks y un Date
/Calendar
, básicamente necesita realizar escalas (ticks a millis) y compensar (del 1 de enero de 1AD al 1 de enero de 1970).
Las API incorporadas de fecha y hora de Java son bastante desagradables. Yo personalmente recomendaría que use Joda Time en su lugar. Si pudiera decir lo que realmente está tratando de hacer, podemos ayudarlo más.
EDIT: Bueno, aquí hay algunos ejemplos de código:
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 este construye una fecha/Calendario representa el UTC instante de 09.14.2019. La representación de .NET es algo confusa: puede crear dos valores de DateTime que son los mismos excepto por su "tipo" (pero por lo tanto representan instantes diferentes) y ellos afirmarán que son iguales. Es un poco de un desastre :(
En mi escenario actual que había ahorrado valor calculado garrapatas en C#; ahora lo que quiero es leer ese valor de tilde y obtener la misma fecha en Java. –
@Asoo: Bien. Caminando para trabajar en el código ATM en veinte minutos. Básicamente divide por tics por milisegundo y resta una compensación. También debe tener en cuenta las compensaciones de la zona horaria. –
Gracias @Skeet .... Pero si quiero calcular los ticks en Java y leerlos en C# ... probé esto pero no da el mismo valor: TimeZone utc = TimeZone.getTimeZone ("UTC"); Calendar calendar = Calendar.getInstance (utc); calendar.set (2010,8,14,0,0,0); System.out.println (calendar.getTimeInMillis() * TICKS_PER_MILLISECOND + TICKS_AT_EPOCH); –