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