Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simplest way to get local milliseconds in a time zone with Joda-Time

Tags:

java

jodatime

Currently, to get milliseconds from start of 1970 in a local time zone, I do

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

This works, but is there a simpler way to do this?

like image 670
Alexey Romanov Avatar asked Sep 10 '25 21:09

Alexey Romanov


2 Answers

You can make this a little clearer by storing a constant LocalDateTime referring to Jan 1, 1970, and then calculating a Duration between that point in time (for a given time zone) and the instant that you care about, like:

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

...

new Duration(JAN_1_1970.toDateTime(someTimeZone), endPointInstantOrDateTime).getMillis();
like image 183
Andrew McNamee Avatar answered Sep 12 '25 09:09

Andrew McNamee


Use (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);
like image 45
Ethan Lee Avatar answered Sep 12 '25 09:09

Ethan Lee