Опытный разработчик не так давно зашёл в .Net и поставил цель получить сертификат Microsoft. Свой ежедневный прогресс он описывает на канале .Net Разработчик. Заметки об изученном материале, советы по повышению производительности и поддержке мотивации, ин
День 1402.
35 Заблуждений о Дате и Времени. Окончание
Начало
Продолжение
24. Переход на летнее время происходит одновременно во всех часовых поясах
Летнее время в Чили начинается в полночь, а в зоне Америка/Торонто - в 2 часа ночи. В Европе переход на летнее время происходит в последнее воскресенье марта, а в Северной Америке - во второе воскресенье марта.
25. Недели начинаются в понедельник
В Израиле неделя начинается в воскресенье.
26. Выходные - это суббота и воскресенье
Многие страны используют разные правила для рабочей недели и выходных. Вот несколько примеров:
Канада: суббота-воскресенье
Израиль: пятница-суббота
Иран: пятница
Непал: суббота
27. Месяц длится 28-31 день
Википедия говорит, что месяцы могут длиться 32 дня в юлианском календаре. Также см. пример из п.4.
28. Год начинается 1 января
В Великобритании до 1752 года юридический год начинается 25 марта. Так, например, за 24 марта 1707 г. сразу же следовало 25 марта 1708 г., а днем, следующим за 31 декабря 1708 г., был 1 января 1708 г.
В эфиопском календаре год начинается 11 или 12 сентября.
Другие примеры есть в статье Википедии про Новый год.
29. Существует нулевой год
В системе Anno Domini (AD), которая используется для нумерации лет по григорианскому календарю, за годом 1 до н.э. непосредственно следует год 1 н.э. Таким образом, года 0 не существует.
30. Об изменениях в часовых поясах предупреждают заранее
Аргентина уведомила за 11 дней о своем решении отменить переход на летнее время в 2009/2010 гг.
В 2011 Турция уведомила за две недели о том, что откладывает переход на летнее время.
В 2013 Марокко менее чем за день уведомили об изменении своих правил часового пояса.
В 2022 Чили уведомили за 1 месяц, что меняют правила часового пояса. Для компаний, использующих ежемесячные обновления, это может быть сложно реализовать. В Майкрософт даже выпустили особое руководство на этот случай.
Ну и не стоит забывать про метания России то в летнее, то в зимнее время.
31. DateTime.UtcNow равномерно увеличивается
Вы можете изменить системное время вручную или оно может обновиться с NTP-сервера. Поэтому DateTime.UtcNow <= DateTime.UtcNow может выдать false, если между вызовами произошла корректировка назад.
32. При отображении даты вы получите тот же год, что и в объекте DateTime
Некоторые библиотеки позволяют различать год (например, yyyy) и год как неделю ISO (например, YYYY). В этом случае отображаемый год может отличаться от года, хранящегося в объекте DateTime. Например, 2022-01-02 — это 52-я неделя 2021 года.
33. 32 бита достаточно, чтобы хранить любую дату
При использовании 32-битных целых чисел со знаком временная метка Unix позволяет представлять дату до 2038 года. Чтобы избежать такого ограничения, используйте 64-битные целые числа.
В некоторых тестах у .NET возникали проблемы с производительностью примерно каждые 29 дней https://github.com/dotnet/runtime/issues/51935. Основная причина заключалась в том, что реализация пула потоков использовала Environment.TickCount, 32-разрядное значение со знаком.
34. Хранение даты в формате UTC предотвращает все проблемы
Если вы хотите запланировать встречу в следующем апреле в 10 утра в Нью-Йорке, не стоит вычислять дату в формате UTC и хранить её. Ведь нельзя быть уверенным, что правила перехода на летнее время не изменятся до встречи.
35. Синхронизация времени между машинами проста
Протокол Network Time Protocol (NTP) позволяет синхронизировать время между машинами. Есть несколько факторов, которые могут затруднить получение точного времени:
- Сервер NTP может быть неточным
- Сеть может быть перегружена
- Сеть может быть несимметричной (не то же количество переходов для запроса к серверу, что и количество переходов для ответа).
- Машинные часы могут быть неточными, поэтому машинные часы дрейфуют довольно часто.
Подробнее об этом было в недавнем посте.
Источник: https://www.meziantou.net/misconceptions-about-date-and-time.htm