アルン:
私は、コードの下に使用してミリ秒にZonedDateTimeを変換しようとしています。
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zonedDateTime =ldt.atZone(ZoneId.of(""Asia/Kolkata""));
zonedDateTime.toInstant().toEpochMilli();
しかし、この1返します(ミリ秒)は、現地時間に基づいて。そして、それはするzoneidを考慮していません。
さんとしましょうLocalDateTime("2019-04-10T05:30")
。私はこれを変換する場合はZonedDateTime
ゾーンID(「アジア/コルカタ」)と、私は(そうです"2019-04-10T05:30+05:30[Asia/Kolkata]"
)。それから私はEpochMilli(15548.544億)=(に変換"Wed Apr 10 2019 00:00:00"
UTCで)。
AxelH:
あなたは、使用しているInstant
ことのミリ秒表現を取得します。インスタントゾーンベースではありません。あなたはそれでゾーンを持つべきではありませんので、「00Z:00 1970-01-01T00」今、エポック時間はに基づいています。
あなたが作成したい場合はZoneDateTime
エポック値から、あなたは簡単に作成することができInstant
、そのエポック時に、次に作成ZonedDateTime
をご希望のゾーンで:
//Let's create our zone time (just to keep your logic
LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zonedDateTime =ldt.atZone(ZoneId.of("Asia/Kolkata"));
//Then get the epoch on GMT
long e = zonedDateTime.toInstant().toEpochMilli();
Instant i = Instant.ofEpochMilli(e);
System.out.println(ZonedDateTime.ofInstant(i, ZoneId.systemDefault()));
System.out.println(ZonedDateTime.ofInstant(i, ZoneId.of("Asia/Kolkata")));
2019-04-12T05:10:31.016 + 02:00 [ヨーロッパ/パリ]
2019-04-12T08:40:31.016 + 05:30 [アジア/コルカタ]
注:上記のコードは次のように使用すべきではない、取得する必要はありませんLocalDateTime
そして、ZonedDateTime
最終的に作成しますInstant
。これはたださえゾーンで、これは一点で「失われた」ことになることを示すことです。
単純に使用します。
long e = Instant.now().toEpochMilli();