Нулевое января
May. 31st, 2018 12:40 pmПосле вопроса про миллиард секунд разговорился с коллегами. Полезли проверять, чему соответствует дата 0 в наших системах.
Про Excel я помнил, что там это 00/01/1900, но при этом мне почему-то в голову не приходило проверить, чему соответствует дата −1. Оказалось, ничему — в Excel невозможно поставить дату до начала 1900 года.
(если я правильно помню, Excel под Mac долгое время ставил нулевую дату на 00/01/1904, поэтому в современных версиях Excel есь возможность выбора базы для дат — я на эти грабли уже наступал, прелесть)
В Matlab нулевая дата тоже приходится на нулевое января, только и год там нулевой: 00/01/0000. Зато — прогресс! — он понимает отрицательные числа. И дата −1 попадает на 30 декабря 9999 года. Почему 30 декабря, понятно — чтобы через 2 дня было 1 января, а что там между ними — 31 декабря или 0 января, — это уже детали. И почему 9999 года тоже, наверное, понятно — в какой-нибудь первой версии MatLab вывод даты был предусмотрен только в рамках 4 цифр: проблему 2000 года решили, а даты до нашей эры никого никогда не будут интересовать.
Про Excel я помнил, что там это 00/01/1900, но при этом мне почему-то в голову не приходило проверить, чему соответствует дата −1. Оказалось, ничему — в Excel невозможно поставить дату до начала 1900 года.
(если я правильно помню, Excel под Mac долгое время ставил нулевую дату на 00/01/1904, поэтому в современных версиях Excel есь возможность выбора базы для дат — я на эти грабли уже наступал, прелесть)
В Matlab нулевая дата тоже приходится на нулевое января, только и год там нулевой: 00/01/0000. Зато — прогресс! — он понимает отрицательные числа. И дата −1 попадает на 30 декабря 9999 года. Почему 30 декабря, понятно — чтобы через 2 дня было 1 января, а что там между ними — 31 декабря или 0 января, — это уже детали. И почему 9999 года тоже, наверное, понятно — в какой-нибудь первой версии MatLab вывод даты был предусмотрен только в рамках 4 цифр: проблему 2000 года решили, а даты до нашей эры никого никогда не будут интересовать.
no subject
Date: 2018-05-31 11:16 am (UTC)no subject
Date: 2018-05-31 11:51 am (UTC)При этом например функция dayOfMonth в том же классе офигенно сложная (это вторая подсказка в общем-то)
no subject
Date: 2018-05-31 01:34 pm (UTC)no subject
Date: 2018-05-31 01:36 pm (UTC)no subject
Date: 2018-05-31 01:42 pm (UTC)no subject
Date: 2018-05-31 01:45 pm (UTC)короче структура "дата" содержит единственное целое число, ну скажем Х, а фунция день_недели вычисляет Х mod 7
А вот вычислить по номеру дня от сотворения мира евонный месяц-год-день это таки очень нетривиально
no subject
Date: 2018-05-31 01:50 pm (UTC)no subject
Date: 2018-06-02 06:35 am (UTC)Я смотрел как-то видео про все грабли с временем - часовые пояса, летнее время, декретное время, переход с юлианского на грегорианский календарь, в..ременная .отмена летнего времени, разное время на западном берегу в автономии и в еврейских поселениях. Закачивалось все leap second которую одни повторяют дважды, а другие размазывают на целый день
no subject
Date: 2018-06-02 06:57 am (UTC)no subject
Date: 2018-06-02 08:26 am (UTC)Концептуально все и без Википедии понятно, а на практике это чудовищное количество условий - даже если оставаться в рамках 20-го века, нужно знать кто, где, когда и на сколько времени вводил летнее время, менял часовые пояса (какой-то остров недавно переехал поближе к Австралии, а Израиле кроме последних пяти лет, каждый год заново голосовали, когда именно будет летнее время). Leap second и сейчас вводится голосованием раз в несколько лет.
no subject
Date: 2018-06-02 09:08 am (UTC)no subject
Date: 2018-06-02 06:27 am (UTC)Что-то типа Seconds / 86400 % 7
no subject
Date: 2018-06-02 06:59 am (UTC)no subject
Date: 2018-05-31 12:05 pm (UTC)https://www.unixtimestamp.com/
no subject
Date: 2018-05-31 01:37 pm (UTC)no subject
Date: 2018-05-31 01:39 pm (UTC)no subject
Date: 2018-05-31 01:52 pm (UTC)no subject
Date: 2018-06-01 02:34 pm (UTC)