"2015-01-05 17:00"
とZoneId
が"Australia/Sydney"
のような文字列型の時間があります。Java 8与えられた時間と時間帯をUTC時刻に変換する
Java 8 datetime APIを使用して、この時刻情報を対応するUTC時刻に変換するにはどうすればよいですか?
また、DSTを検討する必要があります。
"2015-01-05 17:00"
とZoneId
が"Australia/Sydney"
のような文字列型の時間があります。Java 8与えられた時間と時間帯をUTC時刻に変換する
Java 8 datetime APIを使用して、この時刻情報を対応するUTC時刻に変換するにはどうすればよいですか?
また、DSTを検討する必要があります。
あなたはJava8でZonedDateTime
クラスを探しています - タイムゾーンを持つ完全な日付時刻とUTC /グリニッジからのオフセットを解決しました。デザイン面では、このクラスは主にLocalDateTime
とZoneId
の組み合わせとして表示する必要があります。 ZoneOffset
は、クラスが夏時間のオーバーラップ中に瞬間を表すことを保証するために使用される重要な、しかし二次的な情報です。例えば
:
ZoneId australia = ZoneId.of("Australia/Sydney");
String str = "2015-01-05 17:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime localtDateAndTime = LocalDateTime.parse(str, formatter);
ZonedDateTime dateAndTimeInSydney = ZonedDateTime.of(localtDateAndTime, australia);
System.out.println("Current date and time in a particular timezone : " + dateAndTimeInSydney);
ZonedDateTime utcDate = dateAndTimeInSydney.withZoneSameInstant(ZoneOffset.UTC);
System.out.println("Current date and time in UTC : " + utcDate);
既存の答えの代わりにセットアップするために適切なタイムゾーンとフォーマッタです:
String input = "2015-01-05 17:00";
ZoneId zone = ZoneId.of("Australia/Sydney");
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm").withZone(zone);
ZonedDateTime utc = ZonedDateTime.parse(input, fmt).withZoneSameInstant(UTC);
データベースと対話したいので、あなたが必要があるかもしれませんa java.sql.Timestamp
です。この場合、明示的にUTC時刻に変換する必要はありませんが、代わりにインスタントを使用できます。
ZonedDateTime zdt = ZonedDateTime.parse(input, fmt);
Timestamp sqlTs = Timestamp.from(zdt.toInstant());
**// Refactored Logic**
ZoneId australia = ZoneId.of("Australia/Sydney");
ZoneId utcZoneID= ZoneId.of("Etc/UTC");
String ausTime = "2015-01-05 17:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
//converting in datetime of java8
LocalDateTime ausDateAndTime = LocalDateTime.parse(ausTime, formatter);
// DateTime With Zone
ZonedDateTime utcDateAndTime = ausDateAndTime.atZone(utcZoneID);
// output - 2015-01-05T17:00Z[Etc/UTC]
// With Formating DateTime
String utcDateTime = utcDateAndTime.format(formatter);
// output - 2015-01-05 17:00
「UTCタイム」とはどういう意味ですか?あなたはインスタントをしたいですか?またはjava.sql.Date?あるいは、時代以来の数ミリ秒? – assylias