Java 8 timezone conversions
Solution 1:
Try:
String isoDateTime = "2014-09-14T17:00:00+00:00";
ZonedDateTime fromIsoDate = ZonedDateTime.parse(isoDateTime);
ZoneOffset offset = ZoneOffset.of("+09:30");
ZonedDateTime acst = fromIsoDate.withZoneSameInstant(offset);
System.out.println("Input: " + fromIsoDate);
System.out.println("Output: " + acst.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME));
Output:
Input: 2014-09-14T17:00Z
Output: 2014-09-15T02:30:00+09:30
Using OffsetDateTime
While it is generally better to use ZonedDateTime
as shown above, you can perform the same conversion using OffsetDateTime
as follows:
String isoDateTime = "2014-09-14T17:00:00+00:00";
OffsetDateTime fromIsoDate = OffsetDateTime.parse(isoDateTime);
ZoneOffset offset = ZoneOffset.of("+09:30");
OffsetDateTime acst = fromIsoDate.withOffsetSameInstant(offset);
Solution 2:
Slight improvement on the above. Avoids hardcoding offset. Also, takes care of daylight savings.
public static LocalDateTime convertTo(LocalDateTime dateTime, String timeZone) {
ZoneId zone = ZoneId.of(timeZone);
ZonedDateTime zdt = dateTime.atZone(zone);
ZoneOffset offset = zdt.getOffset();
return dateTime.plus(offset.getTotalSeconds(), ChronoUnit.SECONDS);
}