Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 229

Вы можете преобразовать значение epoch в строку с помощью функции ctime():

>>> 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() использует для вывода информации на экран специ-