May 31, 2022

Вечные проблемы с датами

Даты кажутся очень простыми сущностями, пока не занимаешься программированием

Даже не представляю что творилось с датами ранее. Самый известный баг с датами – «проблема 2000». Хранить 4 цифры года было дорого, поэтому хранили 2, а при смене на 00 немало машин порешало, что наступил 1900.
Сейчас для серьёзных систем есть стандарты: формате UTC, «нулевая» дата (01.01.1970 UTC0), отсчёт в миллисекундах, сохранении информации по UTC0 + часовой пояс. Однако, для их соблюдения разработчики должны хотя бы переехать из шапито.

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

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

Сегодня бот напомнил мне поздравить друга, чьё др я знал и так, оно завтра. Но т.к. «счастливые часов не наблюдают», то я потрудился сочинить поздравление, отправил, получил комментарий, посмотрел на часы и «непонел».

Что может произойти с датой в гугл таблицах:

  • Она может искажаться датой сервера, которые раскиданы по миру.
  • А может быть корректно записана относительно 0 по Гринвичу, но не с вашим часовым поясом.
  • У неё могут появиться искажения в части времени, которые скрыты формированием.

Все эти проблемы я встречал уже в нескольких проектах. Универсального решения не нашёл. Гугл таблицы расковыривают ваш текст в некорректный объект даты и не дают просто так считать сырой текст. Это может проявиться даже в обычных формулах.

Короче: в интерфейсе у вас даты верные, а по факту нет, но проявится это только в расчётах.

В моём случае даты записывались в поясе -4 или -5, отставали на 24 или 23 часа. Не не всегда при поясе -5 дата сдвигалась на -23 часа, могла и на -24, а при -4 на -23. Я забыл про фокусников: брал дату по Гринвичу и сдвигал +3 (в наш пояс). В результате дата 01.06 0:00: превратилась в 31.05 23:00.

Конечно, немалую роль в этих проблемах играет Java Script, который используется в Google App Scripts. Пердолинг с датами для него классика.

В общем, даты в гугл таблицах не то чем кажутся.

https://t.me/etonikmedoed/177