2015-10-28 6 views
3

У меня есть URL, который возвращает дату в этом форматеPython разбора дата с strptime

url_date = "2015-01-12T08:43:02Z" 

Я не знаю, почему есть строки, было бы проще, чтобы получить его как "2015-01-1208:43:02", который был бы проще проанализируйте использование

datetime.datetime.strptime(url_date , '%Y-%m-%d') 

но не работает. Я попытался с

%Y-%m-%d 
%Y-%m-%d-%H-%M-%S 
%Y-%m-%d-%H-%M-%S-%Z 

Но я продолжаю получать ошибки, как «временные данные 2015-01-12T08: 43: 02Z не соответствует ...»

+0

связаны: [? Как разобрать ISO 8601 формате даты в Python] (http://stackoverflow.com/q/127803/4279) – jfs

ответ

4

Формат, который вы ищете, - '%Y-%m-%dT%H:%M:%SZ'.

Пример -

>>> url_date = "2015-01-12T08:43:02Z" 
>>> import datetime 
>>> datetime.datetime.strptime(url_date , '%Y-%m-%dT%H:%M:%SZ') 
datetime.datetime(2015, 1, 12, 8, 43, 2) 

Для нового требования в комментариях -

, если я хотел бы получить время назад со строками, как в 2015-01-12: 08: 43:02, какие методы должны после datetime(). Datetime()

Вам нужно будет использовать .strftime() на datetime.datetime объект с форматом - '%Y-%m-%d:%H:%M:%S'. Пример -

>>> url_date = "2015-01-12T08:43:02Z" 
>>> dt = datetime.datetime.strptime(url_date , '%Y-%m-%dT%H:%M:%SZ') 
>>> dt.strftime('%Y-%m-%d:%H:%M:%S') 
'2015-01-12:08:43:02' 

Если вы хотите компонент времени, вы можете использовать .time() для этого. Пример -

>>> dt = datetime.datetime.strptime(url_date , '%Y-%m-%dT%H:%M:%SZ') 
>>> dt.time() 
datetime.time(8, 43, 2) 
+0

Спасибо, только один быстрый вопрос .. если бы я хотел получить время назад со строками, как в 2015-01-12: 08: 43: 02, какие методы должны после datetime(). Datetime() –

+0

Вы хотите получить результат как строка? И в этом формате? Если да, проверьте пример '.strftime()', приведенный выше. –

+0

Я просто хочу, чтобы это как строка, как ваш первый пример '2015-01-12: 08: 43: 02', который я только что пробовал btw, и я получаю' error, required argument 'format' (pos 1) not found' –

5

Вы были рядом с «Z» в ваша последняя попытка - вам нужно указать значения букв T, Z и двоеточия в строке формата.

>>> import datetime 
>>> url_date = "2015-01-12T08:43:02Z" 
>>> datetime.datetime.strptime(url_date , '%Y-%m-%dT%H:%M:%SZ') 
datetime.datetime(2015, 1, 12, 8, 43, 2) 
+0

Спасибо, только один быстрый вопрос .. если я хотел получить время назад со строками, как в '2015-01-12: 08: 43: 02', какие методы должны после' datetime(). datetime() '? –

+0

в двух словах, я хотел бы отправить время в базу данных, а поле 'DATETIME' не может принимать более определенного количества цифр, а именно« 2015-10-4: 06: 13: 22 », поэтому я бы просто как узнать, как это получить обратно –

+0

Итак, вы хотите преобразовать его _from_ a datetime, _to_ a string? Используйте 'datetime_obj.strftime («% Y-% m% d:% H:% M:% S »)'. – Kevin