Мне кажется, что основной ответ все еще не так ясен, и стоит потратить время, чтобы понять, время и часовые пояса .
Самое важное, что нужно понимать при работе со временем, это то, что время относительно !
2017-08-30 13:23:00
: (наивная дата-время) представляет местное время где-нибудь в мире, но учтите, что 2017-08-30 13:23:00
в Лондоне НЕ ТО ЖЕ ВРЕМЯ как 2017-08-30 13:23:00
в Сан-Франциско.
Поскольку одну и ту же строку времени можно интерпретировать как разные моменты времени в зависимости от того, где вы находитесь в мире, существует потребность в абсолютном понятии времени.
A UTC отметка времени - это число в секундах (или миллисекундах) от Epoch (определяется как 1 January 1970 00:00:00
в GMT
часовой пояс +00: 00 смещение).
Эпоха привязана к часовому поясу GMT и, следовательно, является абсолютным моментом времени. A UTC отметка времени , являющаяся смещением от абсолютного времени, поэтому определяет абсолютную точку во времени .
Это позволяет упорядочить события во времени.
Без информации о часовом поясе время является относительным и не может быть преобразовано в абсолютное понятие времени без предоставления какого-либо указания на то, к какому часовому поясу должна быть привязана наивная дата-время.
Какие типы времени используются в компьютерной системе?
naive datetime : обычно для отображения по местному времени (т. Е. В браузере), где ОС может предоставить программе информацию о часовом поясе.
метки времени UTC : метка времени UTC является абсолютным моментом времени, как упомянуто выше, но она привязана к заданному часовому поясу, поэтому метку времени UTC можно преобразовать в дату / время в любой часовой пояс, однако он не содержит информацию о часовом поясе. Что это значит? Это означает, что 1504119325 соответствует 2017-08-30T18:55:24Z
, или 2017-08-30T17:55:24-0100
, или также 2017-08-30T10:55:24-0800
. Он не сообщает вам , откуда дата и время записи. Обычно он используется на стороне сервера для записи событий (журналы и т. Д.) Или используется для преобразования timezone с учетом даты и времени в абсолютный момент времени и вычислить разницу во времени .
ISO-8601 datetime string: ISO-8601 - это стандартизированный формат для записи даты и времени с часовым поясом. (На самом деле это несколько форматов, читайте здесь: https://en.wikipedia.org/wiki/ISO_8601). Он используется для последовательной передачи информации о дате и времени с учетом часового пояса между системами.
Когда использовать какие? а точнее когда вам нужно заботиться о часовых поясах?
Если вам нужно как-то заботиться о времени суток , вам нужна информация о часовом поясе. Календарю или будильнику нужно время суток, чтобы назначить встречу в правильное время суток для любого пользователя в мире. Если эти данные сохранены на сервере, сервер должен знать, какой часовой пояс соответствует дате и времени.
Чтобы вычислить разницу во времени между событиями, происходящими из разных мест в мире, достаточно использовать временную метку UTC, но вы теряете возможность анализировать, в какое время произошли события (например, для веб-аналитики вы можете захотеть знать, когда пользователи приходят на ваш сайт по местному времени : вы видите больше пользователей утром или вечером? Вы не можете понять это без информации о времени суток.
Смещение часового пояса в строке даты :
Другим важным моментом является то, что смещение часового пояса в строке даты равно , а не фиксировано . Это означает, что, поскольку 2017-08-30T10:55:24-0800
говорит смещение -0800
или 8 часов назад, это не значит, что так будет всегда!
Летом вполне может быть летнее время, и это будет -0700
Это означает, что смещение часового пояса (+0100) отличается от имени часового пояса (Европа / Франция) или даже обозначение часового пояса (CET)
America/Los_Angeles
часовой пояс занимает место в мире , но зимой он превращается в обозначение смещения часового пояса PST
(Pacific Standard Time), иPDT
(тихоокеанское летнее время) летом.
Итак, помимо получения смещения часового пояса от строки даты, вы также должны получить точное имя часового пояса.
Большинство пакетовсможет преобразовывать числовые смещения из летнего времени в стандартное время самостоятельно, но это не обязательно тривиально с простым смещением.Например, WAT
обозначение часового пояса в Западной Африке, это UTC + 0100, точно так же, как CET
часовой пояс во Франции, но Франция наблюдает за переходом на летнее время, в то время как Западная Африка не (потому что они близки к экватору)1158 * Короче говоря, это сложно.ОЧЕНЬ сложно, и поэтому вам не следует делать это самостоятельно, но доверять пакету, который сделает это за вас, и СОХРАНЯЙТЕ ЭТО ДО ДАТЫ!