>>>> import time
>>>> fmt = "It's %A, %B %d, %Y, local time %I:%M:%S%p"
>>>> t = time.localtime()
>>>> t
>time.struct_time(tm_year=2014, tm_mon=2, tm_mday=4, tm_hour=19,
>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 "", line 1, in
>··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)
Да.
Даже если строка совпадает с заданным форматом, будет сгенерировано исключение, если одно из значений находится вне диапазона:
>>>> time.strptime("2012-13-29", fmt)
>Traceback (most recent call last):
>··File "", line 1, in
>··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/