Java 8
を使用しています
これは私のZonedDateTime
がどのように見えるかです
2013-07-10T02:52:49+12:00
私はこの値を次のように取得します
z1.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
ここで、z1
はZonedDateTime
です。
この値を2013-07-10T14:52:49
として変換したかった
どうやってやるの?
これは、あなたの望むことですか?これは、以前にZonedDateTime
をLocalDateTime
に変換することにより、指定されたZoneId
でZonedDateTime
をInstant
に変換します。
LocalDateTime localDateTime = LocalDateTime.ofInstant(z1.toInstant(), ZoneOffset.UTC);
または、ハードコードされたUTCではなく、ユーザーのシステムタイムゾーンが必要な場合もあります。
LocalDateTime localDateTime = LocalDateTime.ofInstant(z1.toInstant(), ZoneId.systemDefault());
@SimMac明快さをありがとう。私も同じ問題に直面し、彼の提案に基づいて答えを見つけることができました。
public static void main(String[] args) {
try {
String dateTime = "MM/dd/yyyy HH:mm:ss";
String date = "09/17/2017 20:53:31";
Integer gmtPSTOffset = -8;
ZoneOffset offset = ZoneOffset.ofHours(gmtPSTOffset);
// String to LocalDateTime
LocalDateTime ldt = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(dateTime));
// Set the generated LocalDateTime's TimeZone. In this case I set it to UTC
ZonedDateTime ldtUTC = ldt.atZone(ZoneOffset.UTC);
System.out.println("UTC time with Timezone : "+ldtUTC);
// Convert above UTC to PST. You can pass ZoneOffset or Zone for 2nd parameter
LocalDateTime ldtPST = LocalDateTime.ofInstant(ldtUTC.toInstant(), offset);
System.out.println("PST time without offset : "+ldtPST);
// If you want UTC time with timezone
ZoneId zoneId = ZoneId.of( "America/Los_Angeles" );
ZonedDateTime zdtPST = ldtUTC.toLocalDateTime().atZone(zoneId);
System.out.println("PST time with Offset and TimeZone : "+zdtPST);
} catch (Exception e) {
}
}
出力:
UTC time with Timezone : 2017-09-17T20:53:31Z
PST time without offset : 2017-09-17T12:53:31
PST time with Offset and TimeZone : 2017-09-17T20:53:31-08:00[America/Los_Angeles]
フォーマッタに送信する前に、目的のタイムゾーン(UTC)に変換する必要があるようです。
z1.withZoneSameInstant( ZoneId.of("UTC") )
.format( DateTimeFormatter.ISO_OFFSET_DATE_TIME )
2018-08-28T17:41:38.213Z
のようなものが表示されます