ТЛ; др
ZonedDateTime.now( // Capture the current moment as seen in the wall-clock time used by the people of a certain region (time zone).
ZoneId.of( "Asia/Gaza" ) // Specify time zone by proper IANA-defined name, never a 3-4 letter pseudo-zone such as `PST` or `CST`.
) // Returns a `ZonedDateTime` object.
.toString() // Generate a `String` to represent the value of that `ZonedDateTime`.
Подробнее
Ответ Андерсена правильный.
Вот некоторый современный код, помогающий с отладкой.
Проверка текущего момента в UTC
Относительно первой пули Андерсена ...
Проверьте, были ли часы вашего компьютера установлены неправильно или сместились. Спросите текущий момент в UTC , чтобы избежать осложнений часовых поясов.
Instant now = Instant.now() ; // Capture current moment in UTC.
Сравните свои результаты с живым веб-сайтом, показывающим время UTC, например:
https://time.is/UTC
Если неверно, подключите компьютер к надежному серверу времени , локальному для вашей сети или через интернет.
Проверить часовой пояс по умолчанию
Относительно второй пули Андерсена ...
Проверьте текущий часовой пояс JVM по умолчанию.
ZoneId z = ZoneId.systemDefault() ;
String output = z.toString() ;
Укажите нужный часовой пояс
Если часовой пояс не указан, JVM неявно применяет свой текущий часовой пояс по умолчанию. Это значение по умолчанию может измениться в любой момент во время выполнения (!), Поэтому ваши результаты могут отличаться. Лучше указать в качестве аргумента ваш желаемый / ожидаемый часовой пояс .
Укажите собственное имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте 3-4-буквенное сокращение, например EST
или IST
, поскольку они не истинных часовых поясов, не стандартизированы и даже не уникальны (!).
ZoneId z = ZoneId.of( "Asia/Gaza" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
Обновление tzdata
Как упоминал Андерсен, ваш источник данных о часовом поясе может быть устарел. Политики по всему миру демонстрируют странную склонность пересматривать смещение, используемое их часовыми поясами.
Большинство систем получают данные о часовых поясах из tzdata , опубликованного IANA . Эти данные ранее были известны как «База данных Олсона».
Вы должны поддерживать эти данные в актуальном состоянии, если какие-либо часовые пояса, которые вас интересуют, были изменены. Вы можете найти данные часового пояса в нескольких местах, включая
Я искал историю изменений часовых поясов в Палестине, но эта страница Википедии, Время в Государстве Палестина , является неполной и требует некоторой работы.
О java.time
Платформа java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .