web-dev-qa-db-fra.com

Moyen le plus simple d'obtenir des millisecondes locales dans un fuseau horaire avec Joda-Time

Actuellement, pour obtenir des millisecondes à partir du début de 1970 dans un fuseau horaire local, je fais

long localMillis = dateTime.withZone(timeZone).toLocalDateTime()
    .toDateTime(DateTimeZone.UTC).getMillis();

Cela fonctionne, mais existe-t-il un moyen plus simple de le faire?

25
Alexey Romanov

Vous pouvez rendre cela un peu plus clair en stockant une constante LocalDateTime faisant référence au 1er janvier 1970, puis en calculant un Duration entre ce point dans le temps (pour un fuseau horaire donné) et l'instant où vous vous souciez, comme:

private static final LocalDateTime JAN_1_1970 = new LocalDateTime(1970, 1, 1, 0, 0);

...

new Duration(JAN_1_1970.toDateTime(someTimeZone), endPointInstantOrDateTime).getMillis();
16
Andrew McNamee

Utilisez (joda-time-2.3.jar) org.joda.time.LocalDateTime # toDateTime () # getMillis ().

org.joda.time.format.DateTimeFormatter dtf = org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
org.joda.time.LocalDateTime ldt = dtf.parseLocalDateTime("2014-12-25 12:23:34.567");
System.out.println(ldt);

long delta = ldt.toDateTime().getMillis();
System.out.println(delta);

Java.util.Date dt = new Java.util.Date(delta);
System.out.println(dt);
3
Ethan Lee