Часовые пояса PHP с минутами, отличными от 00, 30 или 45 в старых датах

Я работаю над системой, которая должна иметь дело с записями в базе данных, которые включают ряд очень старых периодов, и в итоге у меня возникла проблема, связанная с часовыми поясами.

Из того, что я искал, есть только часовые пояса со значениями 00, 30 или 45 в минутах (https://www.timeanddate.com/time/time-zones-interesting.html). Однако, когда мы собираемся анализировать очень старые даты, кажется, что часовой пояс каким-то образом смещен, возможно, в попытке исправить время.

Код:

<?php
$timezones = timezone_identifiers_list();
foreach ($timezones as $k => $tz) {
    date_default_timezone_set($tz);
    echo $tz . ' - ' . \DateTime::createFromFormat('Y-m-d H:i:s', '1900-01-01 00:00:00')->format(DATE_ATOM) . PHP_EOL;
}

Некоторые примеры того, что возвращается:

  • Африка/Аддис-Абеба – 1900-01-01T00:00:00+02:27
  • Америка/Аргентина/Сан_Луис – 1900-01-01T00:00:00-04:16
  • Америка/Баия_Бандерас - 1900-01-01T00:00:00-07:01
  • Америка/Сан-Паулу – 1900-01-01T00:00:00-03:06
  • Азия/Куала-Лумпур – 1900-01-01T00:00:00+06:46
  • Европа/Афины – 1900-01-01T00:00:00+01:34
  • Европа/Дублин – 1900-01-01T00:00:00-00:25

Кто-нибудь может сказать нам, что происходит??

Спасибо!


person chuckedw    schedule 30.03.2021    source источник
comment
Время (штамп) начинается с 1970-01-01.   -  person Markus Zeller    schedule 31.03.2021
comment
@MarkusZeller, хотя я не думаю, что это напрямую связано с этим вопросом, в PHP отметка времени представляет собой 32- или 64-битное число в соответствии с документы. Допустимый диапазон метки времени обычно составляет от пятницы, 13 декабря 1901 года, 20:45:54 UTC, до вторника, 19 января 2038 года, 03:14:07 UTC. (Это даты, соответствующие минимальному и максимальному значениям для 32-разрядного целого числа со знаком.) Это другая функция, но все же метка времени.   -  person Chris Haas    schedule 31.03.2021
comment
@chuckedw, как упоминает Саммитч в своем ответе, часовые пояса становятся действительно привередливыми, чем дальше вы уходите. Например, если вы сосредоточитесь только на Африке/Аддис-Абаде, вы обнаружите, что в В 1936 году они переместились на 24 минуты и 40 секунд в будущее.   -  person Chris Haas    schedule 31.03.2021
comment
И в том же месте что-то произошло в 1908 году, когда апрель превратился в май   -  person Chris Haas    schedule 31.03.2021


Ответы (1)


Часовые пояса не существовали до конца 19-го века, и даже тогда вряд ли это был бы жесткий набор круглых одночасовых смещений, если бы у вас не было чего-то вроде географически массивной железнодорожной системы, которую вы пытались скоординировать, например у США было.

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

Правила и история, управляющие хронометражем, поразительно широки, сложны и часто мелочны. Вот почему у нас есть библиотеки даты/времени и /usr/share/zoneinfo с 1788 конфигурационными файлами.

person Sammitch    schedule 30.03.2021
comment
Чтобы добавить к этому, большинство записей часовых поясов в tzdb начинаются с записи LMT, которая представляет местное среднее значение. Время в городе, представляющем часовой пояс. Предполагается, что до того, как были зарегистрированы часовые пояса, люди, которые могли быть в этой области, согласовывали свое представление о времени с положением солнца в небе над головой. Хотя, если вы вернетесь достаточно далеко назад, это даже не будет правдой, так как некоторые цивилизации, возможно, просто представляли время большими расплывчатыми сегментами, такими как раннее утро, поздний день и т. д. Слово «полночь» не всегда означало 12 часов ночи. - person Matt Johnson-Pint; 31.03.2021