Глава 10. Системы
tm_min=28, tm_sec=38, tm_wday=1, tm_yday=35, tm_isdst=0)
>>> time.strftime(fmt, t)
"It's Tuesday, February 04, 2014, local time 07:28:38PM"
Если мы попробуем сделать это с объектом date, функция отработает только для
даты, время будет установлено в полночь:
>>> from datetime import date
>>> some_day = date(2014, 7, 4)
>>> fmt = "It's %B %d, %Y, local time %I:%M:%S%p"
>>> some_day.strftime(fmt)
"It's Friday, July 04, 2014, local time 12:00:00AM"
Для объекта time будут преобразованы только части, касающиеся времени:
>>> from datetime import time
>>> some_time = time(10, 35)
>>> some_time.strftime(fmt)
"It's Monday, January 01, 1900, local time 10:35:00AM"
Очевидно, вам не нужно использовать те части объекта time, которые касаются
дней, поскольку они бессмысленны.
Чтобы пойти другим путем и преобразовать строку к дате или времени, исполь-
зуйте функцию strptime() с такой же строкой формата. Эта строка работает не так,
как регулярные выражения, — части строки, не касающиеся формата (без симво-
ла %), должны совпадать точно. Укажем формат «год-месяц-день» вроде 2012-01-29.
Что произойдет, если строка даты, которую вы хотите проанализировать, имеет
пробелы вместо дефисов?
>>> import time
>>> fmt = "%Y-%m-%d"
>>> time.strptime("2012 01 29", fmt)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/
python3.3/_strptime.py", line 494, in _strptime_time
tt = _strptime(data_string, format)[0]
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/
python3.3/_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '2012 01 29' does not match format '%Y-%m-%d'
Будет ли довольна функция strptime(), если мы передадим ей несколько де-
фисов?
>>> time.strptime("2012-01-29", fmt)
time.struct_time(tm_year=2012, tm_mon=1, tm_mday=29, tm_hour=0, tm_min=0,
tm_sec=0, tm_wday=6, tm_yday=29, tm_isdst=-1)
Да.
Календари и часы
299
Даже если строка совпадает с заданным форматом, будет сгенерировано ис-
ключение, если одно из значений находится вне диапазона:
>>> time.strptime("2012-13-29", fmt)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>