В мире программирования уже давно введены стандарты мирового и локального времени и процедуры преобразования между ними. Однако для обычных людей это все ново и они не обращают на это внимание. В результате дата рождения и другие даты могу “съехать” относительно того, что у вас записано в паспорте. Поэтому необходимо более щепетильно подходить к данным времени перед внесением их, особенно в блокчейн. Давайте разберемся
Пример
У вас в паспорте записана дата рождения например 1990-05-05 при этом также указывается место рождения. По нему можно определить местное время и сдвиг к мировому времени.
Если не обращать внимание на сдвиг по мировому времени, то программное обеспечение само поставит сдвиг по локальному времени у вас на устройстве, с которого вы вводите дату рождения, и может получиться так, что:
Вы родились во Владивостоке в 23 часа ночи - то есть UTC+10, а по Москве это минус 7 часов (московское время - это сдвиг UTC+03),
А заполняете форму своей персоны, например, находясь в Москве - в результате программное обеспечение на вашем локальном устройстве (например мобилка, веб-сайт, полная нода блокчейн Erachain) подставит UTC+03
Точное время рождения вы не ставите и вместо вас его ставит ваше устройство как 00:00.
В результате в блокчейн Erachain ваша дата рождения будет такая 1990-05-05 в 00:00 UTC+03
При этом если вы посмотрите дату рождения в международном стандарте, то получится что вы родились на день раньше: 1990-05-04 в 21:00.
Математически все верно, но по “человечески” не совсем!
Теперь если вы находитесь в Москве или Владивостоке, то день рождения (5=е число) не изменится даже с учетом применения локального сдвига.
Однако, если вы например находитесь в Европе, то ваша дата рождения станет 4-е число!
Это можно исправить если в поле где будет отображаться ваша дата рождения принудительно ввести смещение UTC+03.
Пути решения
При вводе важных дат обращать внимание на точное время до минут и на локальный сдвиг в международном стандарте UTC, а не полагаться на ваше локальное время, которое выставит ваше устройство (с которого вы вводите дату и время), и которое может не совпадать с нужным смещением, так как действие тогда происходило в другой местности с другим временным сдвигом. То есть нужно всегда вводить свой UTC, который соответствует нужной местности и точное время до минут.
При выводе даты и времени всегда обращать внимание на сдвиг по времени на том устройстве на котором вы его видите. Так в Японии у вас дата рождения будет 1990-05-05, а в Европе уже 1990-05-04, так как устройство которое будет производить отображение само подставит локальный сдвиг и преобразует дату в международном формате в локальное время. Поэтому обращайте внимание на UTC так же при выводе ваших данных и пересчитывайте время “в уме” или задайте UTC при выводе, если есть такая возможность.
ilammy
Только сохранять надо не время UTC плюс часовой сдвиг, а время по UTC и часовой пояс (то есть Asia/Vladivostok, а не +10:00). Потому что если вы празднуете день рождения в 11 часов ночи, то вы будете праздновать в 11 часов ночи по Владивостоку даже если Владивосток решит, что у него теперь UTC+9.
Вот здесь ещё ошибка, потому что сохранять надо было именно дату, без времени вообще, а не пытаться моделировать временной меткой, надеясь, что момент времени не уплывёт на другой день. Часовые пояса простираются от –12 до +14, так что при таком подходе по какому бы поясу вы бы не сохраняли — где-нибудь у вас будет «неправильная» дата рождения по местному времени.
Ermolaev-Dmitry Автор
Задача стоит сохранить вплоть до минут время рождения
ilammy
Тогда вам придётся жить с тем, что всегда найдётся часовой пояс, где время рождения выглядит не «по-человечески». Если вы родились в 23:00 во Владивостоке — на Камчатке это час ночи следущего дня по местным часам.