Java 8では、Timestamp
(Java.sql
)をLocalDate
(Java.time
)に変換するにはどうすればよいですか?
できるよ:
timeStamp.toLocalDateTime().toLocalDate();
タイムゾーンを考慮して、@ assyliasの回答を少し拡張します。特定のタイムゾーンのLocalDateTimeを取得するには、少なくとも2つの方法があります。
アプリケーション全体にsetDefaultタイムゾーンを使用できます。タイムスタンプ-> Java.time変換の前に呼び出す必要があります。
public static void main(String... args) {
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(utcTimeZone);
...
timestamp.toLocalDateTime().toLocalDate();
}
または、toInstant.atZoneチェーンを使用できます。
timestamp.toInstant()
.atZone(ZoneId.of("UTC"))
.toLocalDate();
受け入れられた答えは理想的ではないので、2セントを追加することにしました
timeStamp.toLocalDateTime().toLocalDate();
一般的に悪い解決策です、システムのタイムゾーンを使用して暗黙的な変換を行うことで物事を本当に混乱させるので、なぜこのメソッドをJDKに追加したのかさえ分かりません。通常、Java8の日付クラスのみを使用する場合、プログラマはタイムゾーンを指定する必要がありますが、これは良いことです。
良い解決策は
timestamp.toInstant().atZone(zoneId).toLocalDate()
zoneIdは使用するタイムゾーンで、通常はZoneId.systemDefault()システムのタイムゾーンまたはZoneOffsetのようなハードコードされたタイムゾーンを使用する場合.UTC
一般的なアプローチは