6

Instant特定の時刻をtime string表す のオブジェクトが与えられた場合、指定された時刻の日付部分 (年、月、日) と指定された時刻の部分でオブジェクトZoneIdを構築する方法は?ZonedDateTimeZoneIdtime string

例えば:

値が1437404400000の Instant のオブジェクト( 20-07-2015 15:00 UTCに相当)、時間文字列21:00、およびEurope/LondonZoneIdを表すオブジェクトが与えられた場合、 20-07に相当するオブジェクトを構築したいと考えています。 -2015 21:00 ヨーロッパ/ロンドン.ZonedDateTime

4

2 に答える 2

9

時間文字列を最初に解析してから、ゾーンを使用してLocalTimea を調整し、時間を適用することができます。例えば:ZonedDateTimeInstant

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm", Locale.US);
LocalTime time = LocalTime.parse(timeText, formatter);
ZonedDateTime zoned = instant.atZone(zoneId)
                             .with(time);
于 2015-07-23T16:54:51.407 に答える
8

インスタントを作成し、そのインスタントの UTC での日付を決定します。

Instant instant = Instant.ofEpochMilli(1437404400000L);
LocalDate date = instant.atZone(ZoneOffset.UTC).toLocalDate();

// or if you want the date in the time zone at that instant:

ZoneId tz = ZoneId.of("Europe/London");
LocalDate date = instant.atZone(tz).toLocalDate();

時間を解析します。

LocalTime time = LocalTime.parse("21:00");

目的の ZoneId で LocalDate と LocalTime から ZoneDateTime を作成します。

ZonedDateTime zdt = ZonedDateTime.of(date, time, tz);

Jon が指摘したように、UTC の日付はその時点での指定されたタイム ゾーンの日付と異なる可能性があるため、必要な日付を決定する必要があります。

于 2015-07-23T17:01:31.643 に答える