>>> time.ctime(now)
'Mon Feb 3 22:31:03 2014'
В следующем разделе вы увидите, как создавать более приятные глазу форматы
для даты и времени.
Значения epoch полезны для обмена датой и временем с разными системами вроде
JavaScript. Однако иногда вам нужно получить именно значения дней, часов и т. д.,
объект time предоставляет их как объекты struct_time. Функция localtime() предо-
ставляет время в вашем текущем часовом поясе, а функция gmtime() — в UTC:
>>> time.localtime(now)
time.struct_time(tm_year=2014, tm_mon=2, tm_mday=3, tm_hour=22, tm_min=31,
tm_sec=3, tm_wday=0, tm_yday=34, tm_isdst=0)
>>> time.gmtime(now)
time.struct_time(tm_year=2014, tm_mon=2, tm_mday=4, tm_hour=4, tm_min=31,
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).
Календари и часы
297
Читаем и записываем дату и время
Функция 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() использует для вывода информации на экран специ-