はじめに
Java8で、Joda-time APIのconvertUTCToLocal()やconvertLocalToUTC()相当の処理です。
Date型はtimezoneに依存してしまうので、差を考慮してDate型にします。
データベースにUTC日時を保存するときに使いました。
Javaコード
Java7まで
org.joda.timeを使います。
public static Date getUtcDate() {
Date local = new Date();
DateTimeZone zone = DateTimeZone.getDefault();
long utc = zone.convertLocalToUTC(local.getTime(), false);
return new Date(utc);
}
Java8
java.timeを使います。
public static Date getUtcDate() {
ZonedDateTime now = ZonedDateTime.now(ZoneOffset.UTC);
ZonedDateTime local = now.withZoneSameLocal(ZoneId.systemDefault());
return Date.from(local.toInstant());
}
参考
https://stackoverflow.com/questions/45584220/utc-to-local-method-in-datetimezone-of-joda-time-to-java-8
https://docs.oracle.com/javase/jp/8/docs/api/java/time/ZonedDateTime.html
終わりに
Java8の日時は、すっきりしていいですね!