Итерация цикла

Часовые пояса и переход на летнее время - это кошмар. Вы, конечно, не должны сами решать эту задачу. Пусть Joda-Time делает тяжелый подъем.

См. этот ответ на аналогичный вопрос, Используя время Джоды, чтобы получить смещение UTC для заданной даты и часовой пояс , Класс DateTimeZone предлагает метод getOffset () .

Пример исходного кода в Joda-Time 2.3 в Java 7 ...

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.

org.joda.time.DateTimeZone californiaTimeZone = org.joda.time.DateTimeZone.forID("America/Los_Angeles");

org.joda.time.DateTime now = new org.joda.time.DateTime(californiaTimeZone);
int millisecondOffsetToAddToUtcToGetLocalTime = californiaTimeZone.getOffset( now );

System.out.println( "millisecondOffsetToAddToUtcToGetLocalTime: " + millisecondOffsetToAddToUtcToGetLocalTime );

// Note the casting to doubles to avoid integer truncation. Time zone offsets are NOT always whole hours.
System.out.println( "Offset in decimal hours: " + (double)millisecondOffsetToAddToUtcToGetLocalTime / 1000d / 60d / 60d );

При запуске в 2013-11-20T01: 03: 56.464-08: 00 ...

millisecondOffsetToAddToUtcToGetLocalTime: -28800000
millisecondOffsetToAddToUtcToGetLocalTime in hours: -8.0

ВАЖНО Этот формат номера -8.0 неверен для смещения. Должно быть либо:

  • -08:00 с двоеточием и двузначными цифрами (с добавлением начального нуля).
  • -08 с начальным нулем.

-2
задан Nate Pet 16 January 2019 в 22:20
поделиться