Марокко теперь на DST постоянно
По состоянию на 26 октября 2018 года Марокко перешло на DST навсегда † .
Правительство Марокко дало уведомление только за 2 дня (!) В Указе 2.18.855 . По-видимому, правительство намерено прекратить все переключения часов без изменений ни для DST , ни для Рамадан . Этот указ означает смещение +01:00
круглогодично .
Этот указ также означает, что Марокко больше не «на летнее время». Новый нормальный является смещением на один час впереди UT C, тогда как в старые времена смещение обычно составляло UT C (смещение ноль часов-минут-секунд). Обратите внимание, что в приведенном ниже коде вызов ZoneRules::isDaylightSavings
возвращает false в настоящее время (начало 2020 г.).
Подробнее см. В Википедии: Летнее время время в Марокко .
† Когда я говорю «навсегда», принимайте это с зерном соли . Политики всего мира проявляют склонность к частым изменениям смещения их часовых поясов. Это «постоянно на летнее время» является лишь последней модой, которая полюбилась политикам. Всегда ожидайте дальнейших изменений.
Избегайте устаревших классов даты и времени
Вы используете ужасные классы даты и времени, которые были заменены годами go современным java .time классов, определенных в JSR 310. Больше нет причин использовать эти ужасные унаследованные классы.
java. время
Укажите предполагаемый часовой пояс.
ZoneId zCasablanca = ZoneId.of( "Africa/Casablanca" ) ;
Извлечение правил зоны.
ZoneRules rulesCasablanca = zCasablanca.getRules() ;
Опрос правил, применимых к конкретному c моменту в этой зоне.
ZoneOffset offset = rulesCasablanca.getOffset( Instant.now() ) ;
boolean isDst = rules.isDaylightSavings( instant ) ;
Или свертывание в одну строку.
ZoneOffset offset = ZoneId.of( "Africa/Casablanca" ).getRules().getOffset( Instant.now() ) ;
Проверьте свою версию Java.
System.out.println( "Java vendor and version:" ) ;
System.out.println( " " + System.getProperty("java.vendor") ) ;
System.out.println( " " + Runtime.version() ) ;
String tzdataVersion =
java.time.zone.ZoneRulesProvider
.getVersions("UTC")
.lastEntry()
.getKey()
;
System.out.println( "tzdata: " + tzdataVersion ) ;
System.out.println( "" ) ;
См. этот код Запустите Live на IdeOne.com .
Java поставщик и версия:
Oracle Corporation
12.0.1 + 12
tzdata: 2018g
offset.toString (): +01: 00
isDst: false
Specifi c date
Давайте попробуем указать ваши c date.
LocalDate localDate = LocalDate.parse( "2019-05-20" ) ;
ZonedDateTime zdt = localDate.atStartOfDay( z ) ;
System.out.println( "zdt.toString(): " + zdt ) ;
System.out.println(
"offset: " + rules.getOffset( zdt.toInstant() ) +
" | is in DST: " + rules.isDaylightSavings( zdt.toInstant() )
);
zdt.toString (): 2019-05-20T00: 00 + 01: 00 [Африка / Касабланка]
смещение: +01: 00 | находится в летнее время: false
tzdata
Oracle списки tzdata файлы, встроенные в Java среды выполнения.
Этот список показывает, что переход Марокко на постоянное летнее время был учтен в tzdata2018g
. Этот файл tzdata был связан с Java версиями 11.0.2, 8u201 и 7u211. По крайней мере, Oracle связал его, в то время как я предполагаю, что проект OpenJDK сделал то же самое (я не проверял).
Марокко переходит на постоянный +01 на 2018-10-27.
Марокко переходит с + 00 / + 01 на постоянный +01, действующий на 2018-10-27, поэтому его часы не откатятся на 2018-10-28, как планировалось ранее .
Чтобы получить версию файла данных tzdata, используемого вашей JVM, см. этот ответ на вопрос, Java - найти tzdata Используемая версия независимо от версии JRE .
О java .time
* 1297 Фреймворк * .time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Учебник Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация: JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java .time классов.
Вы можете обмениваться java .time объектами напрямую с вашей базой данных. Используйте JDB C драйвер , совместимый с JDB C 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где взять классы java .time?
ThreeTen-Extra Проект расширяет java .time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java .time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .