2012-05-03 3 views
1

В следующем коде я пытаюсь преобразовать 2 типа форматов даты в общий формат даты, чтобы сохранить его в своей базе данных.Проблема python datetime при сохранении в базе данных

import datetime 
Date1 = '2012-04-24T12:58:52Z' 

Date2 = 'Tue, 24 Apr 2012 12:56:21 -0700' 

date1 = Date1.replace("T"," ").replace("Z","") 
y = datetime.datetime.strptime(date1,"%Y-%m-%d %H:%M:%S") 
date1 = datetime.datetime.strftime(y,"%A, %b %d %Y %H:%M:%S %p") 

k = Date2.split(" ") 
y = " ".join(k[1:len(k)-1]) 
date2 = datetime.datetime.strptime(y,"%d %b %Y %H:%M:%S") 
date2 = datetime.datetime.strftime(date2,"%A, %b %d %Y %H:%M:%S %p") 

print date1 
print date2 

Это дает мне следующий результат.

Tuesday, Apr 24 2012 12:58:52 PM 
Tuesday, Apr 24 2012 12:56:21 PM 

Но когда я пытаюсь сохранить его в базе данных, он бросает эту ошибку.

Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format 

Может any1, пожалуйста, помогите мне решить эту проблему. Спасибо заранее.

+0

Вы пытались адаптировать strftime для соответствия требуемому формату? – moooeeeep

+0

Привет @moooeeeep, я пробовал это сделать. Но на этот раз появилась другая ошибка. «данные времени» 2012-05-02 19:44:34 'не соответствует формату'% A,% b% d% Y% H:% M:% S% p '" – funnyguy

+0

вы пропустили' T ', см. ниже ответы для правильного формата – snies

ответ

2

Многие БД принимают datetime.datetime объектов.

import datetime 

Date1 = '2012-04-24T12:58:52Z' 
dt1 = datetime.datetime.strptime(Date1, '%Y-%m-%dT%H:%M:%SZ') 
# dt1: datetime.datetime(2012, 4, 24, 12, 58, 52) 

и теперь попробуйте вставить dt1 в DB как объект.

0

Используйте этот формат для date1 и date2:

date1 = datetime.datetime.strftime(y,"%Y-%m-%dT%H:%M:%S") 
date2 = datetime.datetime.strftime(date2,"%Y-%m-%dT%H:%M:%S") 

это приведет:

2012-04-24T12:58:52 
2012-04-24T12:56:21 

сообщение об ошибке вы сообщаете четко говорится, что вам нужен этот формат.

+0

Привет @snies, у этого решения раньше, но появилась следующая ошибка при вставке в db "time data" 2012-04-24 12:58:52 'не соответствует формату'% A,% b % d% Y% H:% M:% S% p '" – funnyguy

+0

Я немного смущен, возможно, вы отредактировали свой вопрос, но я думаю, что у вас есть' T ', ограничивающий дату и время в исходном описании ошибки.Пожалуйста, убедитесь, что говорит ваша ошибка и как выглядит ваша строка формата. Тонкие различия имеют значение. Но это, вероятно, лучше всего, если вы просто разместите db, который используете. – snies

0

Я бы сохранил время как простые целые числа, в секундах с эпохи (отметка времени UNIX). Таким образом, вы можете хранить его в любой базе данных без хлопот. Формат %s спецификатор для strftime возвращает метку времени UNIX в качестве строки-так что-то вдоль линий

int(datetime.datetime.now().strftime('%s')) 

должен работать. Затем вы можете преобразовать метку времени в объект datetime, используя datetime.datetime.fromtimestamp(…).

+1

Вероятно, у него есть конкретная база данных, хотя он и не заявил. Вы теряете функции, такие как postgreSQL current_date, а также конвертируете все времена в секунды с эпохи. – moooeeeep

+0

Правда, прецедент определяет, возможен ли этот подход или нет. – igor

0

Я не совсем уверен, какой объект вы пытаетесь сохранить в БД. Как предполагает eumiro, многие библиотеки позволяют вам хранить объект datetime напрямую. Но при условии, что вам нужно сохранить его как строку, но почему вы не можете просто форматировать объект datetime, как предполагает ошибка базы данных (ГГГГ-ММ-ДД ЧЧ: ММ: ss)?

Так что ... как это:

import datetime 

Date1 = '2012-04-24T12:58:52Z' 
d1 = datetime.datetime.strptime(Date1,"%Y-%m-%dT%H:%M:%SZ") 
d1.strftime("%Y-%m-%d %H:%M:%S") # Store this! 

Date2 = 'Tue, 24 Apr 2012 12:56:21 -0700' 
k = Date2.split(" ") 
y = " ".join(k[1:len(k)-1]) 
d2 = datetime.datetime.strptime(y,"%d %b %Y %H:%M:%S") 
d2.strftime("%Y-%m-%d %H:%M:%S") # Store this! 

Это может быть вне сферы вашего вопроса, но обратите внимание, что с Date2, вы зачистки информации часового пояса (-0700). Если это важно для вас, вы должны разобрать и сохранить это как-то. В strptime есть опция %z, которая анализирует это, но, похоже, она не работает на всех платформах.

+0

Я сделал то же самое и раньше. Это дало мне эту ошибку. "time data" 2012-04-24 12:58:52 'не соответствует формату'% A,% b% d% Y% H:% M:% S% p '" – funnyguy

+0

Привет @Андрю, я использую django с базой данных mysql. – funnyguy

+0

Похоже, вы используете Django и MySQL. Вы должны просто вставить объект datetime напрямую, не преобразовывая его в строку, как предлагает eumiro. Можете ли вы вставить код, где вы устанавливаете атрибут datetime и сохраняете? –

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