2016-08-19 8 views
1

Я пытаюсь преобразовать строку в формат даты, который будет позже сохранен в базе данных SQLite. Ниже приведена строка кода, в которой я получаю сообщение об ошибке.Python: ошибка преобразования даты

date_object = datetime.strptime(date, '%b %d, %Y %H:%M %Z') 

И это ошибка:

File "00Basic.py", line 20, in spider 
    date_object = datetime.strptime(date, '%b %d, %Y %H:%M %Z') File "C:\Python27\lib\_strptime.py", line 332, in _strptime 
    (data_string, format)) ValueError: time data 'Aug 19, 2016 08:13 IST' does not match format '%b %d, %Y %H %M %Z' 

Вопрос 1: Как устранить эту ошибку?

Вопрос 2: Это правильный подход для подготовки даты хранения в SQLite позже?

Обращаем ваше внимание, что это очень новое программирование.

+0

Typo: вы пропустили двоеточие в% H:% M. Он присутствует в примере кода, но отсутствует в сообщении об ошибке. –

+0

У меня проблема в часовом поясе, а не в двоеточии. – EndermanAPM

+0

@JamesK отредактирован. Спасибо, что указали ... –

ответ

0

Вы можете использовать pytz для преобразования часового пояса, как показано ниже:

from datetime import datetime 
from pytz import timezone 

s = "Aug 19, 2016 08:13 IST".replace('IST', '') 
print(timezone('Asia/Calcutta').localize(datetime.strptime(s.rstrip(), '%b %d, %Y %H:%M'))) 
#2016-08-19 08:13:00+05:30 
#<class 'datetime.datetime'> 

Я предлагаю вам использовать dateutil, если вы обрабатываете несколько часовых поясов строки.

+1

спасибо, это сработало отлично! :) –

0

Проблема находится в части формата %Z (часовой пояс). Как documentation объясняет

%Z Time zone name (empty string if the object is naive). (empty), UTC, EST, CST 

Похоже, только UTC, EST и ДКБ являются действительными. (Или это просто не признает IST)

Для того, чтобы исправить это, вы можете использовать параметр %z, который принимает любое UTC смещение, например, так:

struct_time = time.strptime("Aug 19, 2016 08:13 +0530", '%b %d, %Y %H:%M %z') 

Update: Хотя это работает отлично в Python +3,2 это вызывает исключение, когда он запускается с python2

+0

спасибо, но это не сработало. Я снова получаю ту же ошибку. 'ValueError: данные времени '19 августа 2016 08:13 +530' не соответствует формату '% b% d,% Y% H:% M% Z'' –

+0

Остерегайтесь, это ** строчный z * *, также, 0 (in +0530) является обязательным, формат% z - HHMM – EndermanAPM

+0

+ z дает мне еще одну ошибку: 'ValueError: 'z' является плохой директивой в формате '% b% d,% Y % H:% M% z'' –

Смежные вопросы