>tm_sec=3, tm_wday=1, tm_yday=35, tm_isdst=0)
В моем (Центральном) часовом поясе 22:31 — это то же самое, что 04:31 следующего дня в поясе UTC (раньше его называли Гринвичским временем или временем Зулу). Если вы опустите аргумент функции localtime() или gmtime(), они предположат, что сконвертировать нужно текущее время.
Их противоположностью является функция mktime(), которая преобразует объект struct_time в секунды epoch:
>>>> tm = time.localtime(now)
>>>> time.mktime(tm)
>1391488263.0
Результат не совсем похож на предыдущее значение epoch, полученное с помощью функции now(), поскольку объект struct_time сохраняет время лишь до секунд.
Небольшой совет: везде, где возможно, используйте часовой пояс UTC. UTC — это абсолютное время, не зависящее от часовых поясов. Если у вас есть сервер, установите его время согласно часовому поясу UTC, не используйте местное время.
Еще один совет (совершенно бесплатный): никогда не используйте летнее время, если можете этого избежать. Если вы используете летнее время, в одно время года час пропадет (весной вперед), а в другое — наступит дважды (осенью обратно). По каким-то причинам многие организации пользуются летним временем в своих компьютерных системах, а потом удивляются удвоению и потере данных. Заканчивается все печально.
Помните своих друзей — UTC для времени и UTF-8 для строк (о UTF-8 подробнее можно прочитать в главе 7).
Читаем и записываем дату и время
Функция Isoformat() — это не единственный способ записывать дату и время. Вы уже видели функцию ctime() в модуле time, которую можете использовать для преобразования времени epoch в строку:
>>>> import time
>>>> now = time.time()
>>>> time.ctime(now)
>'Mon Feb··3 21:14:36 2014'
Вы также можете преобразовывать дату и время с помощью функции strftime(). Она предоставляется как метод в объектах datetime, date и time objects и как функция в модуле time. strftime() использует для вывода информации на экран спецификаторы формата, которые вы можете увидеть в табл. 10.1.
Таблица 10.1. Спецификаторы вывода для strftime()
Спецификатор | Единица даты/времени | Диапазон |
---|
%Y | Год | 1900–… |
%m | Месяц | 01–12 |
%B | Название месяца | Январь, … |
%b | Сокращение для месяца | Янв, … |
%d | День месяца | 01–31 |
%А | Название дня | Воскресенье, … |
а | Сокращение для дня | Вск, … |
%Н | Часы (24 часа) | 00–23 |
%I | Часы (12 часов) | 01–12 |
%p | AM или PM | AM, PM |
%M | Минуты | 00–59 |
%S | Секунды | 00–59 |
К числам слева добавляется ноль.
Рассмотрим пример работы функции strftime(), предоставленной модулем time. Она преобразует объект struct_time в строку. Сначала мы определим строку формата fmt и будем использовать ее снова в дальнейшем: