Javaでミリ秒にZonedDateTimeを変換する方法?

アルン:

私は、コードの下に使用してミリ秒に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:3​​1.016 + 02:00 [ヨーロッパ/パリ]
2019-04-12T08:40:31.016 + 05:30 [アジア/コルカタ]

注:上記のコードは次のように使用すべきではない、取得する必要はありませんLocalDateTimeそして、ZonedDateTime最終的に作成しますInstantこれはたださえゾーンで、これは一点で「失われた」ことになることを示すことです。
単純に使用します。

long e = Instant.now().toEpochMilli();

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=137297&siteId=1