2015-04-09 3 views
0

Иногда я вижу строки даты, подобные этому "2015-04-09T10:59:22Z". Что такое "T" и "Z" здесь? Как разбирать эту строку с помощью python's time.strptime?Как разобрать эту строку strptime

+0

Параметр ' 'Z'' является для [' UTC' зоны в ISO 8601] (https: //en.wikipedia. орг/вики/ISO_8601 # UTC). '' T'' происходит из [комбинированного представления даты и времени] (https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations), –

ответ

1
astr = "2015-04-09T10:59:22Z" 
time.strptime(astr, '%Y-%m-%dT%H:%M:%SZ') 
## returns time.struct_time(tm_year=2015, tm_mon=4, tm_mday=9, tm_hour=10, tm_min=59, tm_sec=22, tm_wday=3, tm_yday=99, tm_isdst=-1) 
1
from dateutil.parser import parse as date_parse 
print date_parse("2015-04-09T10:59:22Z") 

оно не использовать strptime ... но вам не нужно беспокоиться о формате даты довольно много когда-либо

(о да вы, возможно, потребуется pip install python-dateutil): P

+0

aaaawesome; Я этого не знал. –

+0

добавил (а): P –

1

strptime имеет отличная документация в ее manpage (man strptime) и on python.org.

Вы должны указать us, что означают дополнительные символы, потому что мы не знаем, откуда взялась строка.

time.strptime(your_date, '%Y-%m-%dT%H:%M:%S%Z') 

должен сделать трюк: Тем не менее, если предположить T и Z ничего особенного не значит.

EDIT: Z - сокращение по часовой стрелке; следовательно, конечный %Z.

EDIT2: ах, если python's strptime только что понял %Z. Вы должны будете игнорировать его как константа (значит, UTC, если я не ошибаюсь полностью)

time.strptime(your_date, '%Y-%m-%dT%H:%M:%SZ') 

EDIT3: Z время Улу, как я узнал.

+0

К сожалению, я думаю, что Z означает UTC (или что-то ... но просто игнорирует его, вероятно, отлично tbh) –

+0

Да, я думаю, что вы правы ... 'strftime (3)' имел что-то о это, но я не могу найти его в спешке. –

+0

ha! нашел его. Редактировать в 3 ... 2 ... 1 ... –

0

Другие ответы работают и верны, и да, «Z» для Zulu, старый способ обращения к UTC.

Проблема синтаксического анализа со стандартной библиотекой строки, даже заменяя Z с UTC еще оказывает временную зону наивные объект DateTime. Это работа вокруг я использую для создания часового пояса, осведомленный объект DATETIME

from datetime import datetime, timedelta, timezone 
time_string = '1582-10-04T12:34:56.789Z' 
timeformat = '%Y-%m-%dT%H:%M:%S.%fZ' 
datetime.strptime(time_string, timeformat).replace(tzinfo=(timezone(timedelta(0)))) 
# or in your case 
time_string = '2015-04-09T10:59:22Z' 
timeformat = '%Y-%m-%dT%H:%M:%SZ' # No microseconds 
datetime.strptime(time_string, timeformat).replace(tzinfo=(timezone(timedelta(0)))) 
Смежные вопросы