Сервис, подобный this , имеет явное примечание, что
Время указано в местном стандартном времени (LST).Добавьте 1 час, чтобы отрегулировать летнее время, где и когда оно наблюдается.
Для объекта LocalDateTime
ldt
создать момент так же просто, как Instant.of(ldt,zoneId)
.Однако, если я поставлю ZoneId
, то Instant
будет предполагать, что корректировка перехода на летнее время (DST) уже произведена, а ldt
относится к DST, что не так.Каков наиболее естественный для Java способ заставить конструктор Instant
применять «стандартное» смещение, а не учитывать DST?данный год, точные даты переходов DST?Конечно, я могу получить смещение как ZoneOffset offset= ZoneOffset.of(zoneId)
, а затем вычесть offset.getTotalSeconds()
из заданной отметки времени, чтобы перейти к «эталонному» времени.Но присвоение этой скорректированной по эталону метки времени на Instant
все еще имеет ту же проблему DST.
РЕДАКТИРОВАТЬ: Как было предложено ниже, я попробовал это:
String str = String.format("%04d-%02d-%02dT%s:00", year, month, day, hourMinutes);
LocalDateTime ldt = LocalDateTime.parse(str);
Instant i1= ldt.toInstant(zoneId.getRules().getOffset(ldt));
Instant key= ldt.toInstant(zoneId.getRules().getStandardOffset(i1));