Как получить информацию о часовом поясе на macOS (ранее известном как < em> Mac OS X и OS X ), используя Java?

2
Ajith 26 Авг 2011 в 09:05

2 ответа

Лучший ответ

Класс TimeZone используется для часовых поясов в Джава. Чтобы получить часовой пояс системы по умолчанию, вы можете использовать статический метод getDefault.

3
Mathias Schwarz 26 Авг 2011 в 05:11

ТЛ ; др

ZoneId
.of( "Africa/Tunis" ) 
.getRules()
.isDaylightSavings​( 
    Instant.now() 
)

< EM> java.time

Современное решение использует классы java.time , которые вытеснили ужасные устаревшие классы даты и времени: ZoneId и ZoneOffset и ZoneRules.

Ты спрашивал:

Как получить информацию о часовом поясе в Mac OS X с помощью Java?

Получите информацию о часовом поясе через Java на Mac так же, как и на любой другой ОС.

ZoneId

Определите, какой часовой пояс представляет интерес. Укажите правильное название часового пояса в формате Continent/Region, например America/Montreal, Africa/Casablanca или Pacific/Auckland. Никогда не используйте сокращения из 2–4 букв, такие как EST или IST, поскольку они не истинных часовых поясов, не стандартизированы и даже не уникальны (!).

ZoneId z = ZoneId.of( "America/Montreal" ) ;

ZoneRules

Получите правила для этой зоны. Эти правила включают в себя историю прошлых, настоящих и будущих изменений смещения, используемого людьми этого конкретного региона.

ZoneRules rules = z.getRules() ;

Узнайте, какие правила действуют на данный момент. Воспользуемся текущим моментом для этой демонстрации.

Instant instant = Instant.now() ;  // Capture the current moment.

ZoneOffset

Получите смещение, используемое в данный момент в этой зоне. Смещение - это просто количество часов-минут-секунд вперед или назад по всемирному координированному времени (нулевой меридиан).

ZoneOffset offset = rules.getOffset( instant ) ;

Летнее время (DST)

Спросите, действует ли в данный момент в этой зоне летнее время (DST).

boolean isDst = rules.isDaylightSavings​( instant ) ;

Вы также можете запросить предыдущий и следующий переходы в этой зоне и многое другое.

tzdata

Имейте в виду, что в macOS есть собственная копия определения данных tzdata часовые пояса. Обновления ОС Apple включают свежие копии. Убедитесь, что ваша зона актуальна, если зона, интересующая вас, меняется. Эта копия macOS влияет на большинство приложений, не основанных на Java.

Виртуальная машина Java (JVM) включает собственные tzdata . Опять же, если интересующий вас часовой пояс меняется, убедитесь, что все используемые вами JVM обновлены. Обновления Java включают свежие tzdata . Но политики действительно любят менять часовые пояса, часто без предупреждения или без предупреждения. Поэтому вам может потребоваться вручную обновить файл tzdata JVM. И обязательно обновите все установленные вами JVM, а также любые JVM, связанные с любыми приложениями на основе Java, которые вы используете.


О java.time

< em> java.time встроена в Java 8 и новее. Эти классы заменяют неудобные старые устаревшие классы даты и времени, такие как java.util.Date, < a href = "https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Calendar.html" rel = "nofollow noreferrer"> Calendar , & SimpleDateFormat.

Чтобы узнать больше, см. Руководство по Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация - JSR 310.

Joda-Time , теперь в режим обслуживания, рекомендует перейти на java.time.

Вы можете обмениваться объектами java.time непосредственно с вашей базой данных. Используйте драйвер JDBC, совместимый с JDBC 4.2 или новее. Нет необходимости в строках, нет необходимости в классах java.sql.*. Hibernate 5 и JPA 2.2 поддерживают java.time .

Где получить классы java.time?

1
Basil Bourque 3 Июл 2020 в 00:00