Я відчуваю, що головна відповідь все ще не така однозначна, і варто витратити час, щоб зрозуміти час та часові пояси .
Найголовніше, що слід розуміти, маючи справу з часом, - це те, що час відносний !
2017-08-30 13:23:00
: (наївний час), представляє місцевий час десь у світі, але зверніть увагу, що 2017-08-30 13:23:00
в Лондоні НЕ ТАКИЙ самий час, як 2017-08-30 13:23:00
у Сан-Франциско.
Оскільки один і той же рядок часу можна інтерпретувати як різні моменти часу залежно від того, де ви знаходитесь у світі, існує потреба в абсолютному понятті часу.
UTC мітка часу являє собою число в секундах (або мілісекундах) від епохи (визначається як 1 January 1970 00:00:00
при GMT
тимчасової зони +00: 00 зміщення).
Епоха закріплена за часовим поясом GMT, і тому є абсолютним моментом часу. AUTC мітка часу будучи зміщення від абсолютного часу , отже , визначає абсолютну точку в часі .
Це дає можливість вчасно замовляти події.
Без інформації про часовий пояс час є відносним і не може бути перетворений в абсолютне поняття часу без надання певних вказівок, до якого часового поясу має бути прив'язаний наївний час.
Які типи часу використовуються в комп’ютерній системі?
наївний час і дату : зазвичай для відображення, за місцевим часом (тобто в браузері), де ОС може надавати програмі інформацію про часовий пояс.
Часові позначки UTC : Мітка часового поясу UTC є абсолютним моментом часу, як уже згадувалося вище, але вона закріплена в певному часовому поясі, тому часову позначку UTC можна перетворити на дату в будь-якому часовому поясі, однак вона не містить інформації про часовий пояс. Що це означає? Це означає, що 1504119325 відповідає 2017-08-30T18:55:24Z
, 2017-08-30T17:55:24-0100
або також 2017-08-30T10:55:24-0800
. Це не говорить вам, звідки записана дата та час. Зазвичай він використовується на стороні сервера для запису подій (журналів тощо) або використовується для перетворення часового поясу, визначеного часовим поясом, в абсолютний момент часу та обчислення час, різниці в часі .
ISO-8601 DateTime рядок: 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
(тихоокеанський стандартний час) часовий пояс, зміщений у зимовий час, та PDT
(тихоокеанський денний час) влітку.
Отже, на додаток до отримання часового поясу, зміщеного з датчика, ви також повинні отримати назву часового поясу, щоб бути точною.
Більшість пакетів зможуть самостійно перетворити числові зсуви з переходу на літній час у стандартний час, але це не обов’язково тривіально при простому зміщенні. Наприклад, WAT
позначення часового поясу в Західній Африці становить UTC + 0100, як іCET
часовий пояс у Франції, але Франція дотримується переходу на літній час, тоді як Західна Африка цього не робить (оскільки вони знаходяться близько до екватора)
Отож, словом, це складно. ДУЖЕ складно, і тому вам не слід робити це самостійно, а довіряйте пакету, який робить це за вас, і ДЕРЖАЙТЕ ДО СУЧАСНОСТІ!
then.strftime('%s')
тому, що очікується місцевий час, але мітка часу вказує, щоdatetime(2008, 1, 1)
в UTC.