Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
7 профессий по цене одной
07:05:47:06
дн. ч. мин. сек.
15 Май 2024
1 мин
29

Необычный результат вычитания временных меток в Java

Иногда при работе с датами и временем в Java можно столкнуться с неожиданными результатами. Особенно это касается разницы во времени между двумя моментами.

Иногда при работе с датами и временем в Java можно столкнуться с неожиданными результатами. Особенно это касается разницы во времени между двумя моментами. Рассмотрим на примере.

Представим, что есть два момента времени, отличающихся на 1 секунду. Например, «1927-12-31 23:54:07» и «1927-12-31 23:54:08». Ожидается, что разница между ними будет одна секунда, но при вычислении разницы в миллисекундах и последующем делении на 1000 для получения количества секунд, результат может удивить — 353 секунды.

Для понимания причины такого поведения необходимо знать о существовании исторических изменений в стандартах времени. В истории были периоды, когда происходили корректировки времени, включая введение или отмену летнего времени, изменение часовых поясов и даже введение «лишних» секунд — так называемых «секунд скачка».

В данном случае результат в 353 секунды связан с тем, что в Китае, где установлен часовой пояс «Asia/Shanghai», 31 декабря 1927 года было введено декретное время. Из-за этого в 23:54:03 произошел «скачок» вперед на 5 минут и 52 секунды.

Java учитывает эти исторические изменения во времени, и поэтому при работе с датами и временем важно учитывать, что разница между двумя моментами времени может быть не такой, как ожидается.

В целом, при работе с датами и временем рекомендуется использовать классы из пакета java.time, которые более удобны и предсказуемы, чем устаревшие классы Date и SimpleDateFormat.

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий