2009-07-21 3 views
0

Я довольно новичок в Python и App Engine, но то, что я пытаюсь сделать, это хранить модель, которая содержит DateProperty, и что DateProperty заполняется датой, введенной пользователем в веб-форму.Создание DateTime с введенной пользователем даты

У меня есть модель:

class Memory(db.Model): 
    author = db.UserProperty() 
    content = db.StringProperty(multiline=True) 
    date = db.DateProperty() 

, а затем создать экземпляр с:

memory = Memory() 
memory.author = users.get_current_user() 
memory.content = self.request.get('content') 

Но как только я пытаюсь сделать что-нибудь со значением даты, я сломаю его , Я предполагаю, - и ввод - значение даты в формате: 2009-07-21

Я пробовал:

memory.date = time.strptime(self.request.get('date'), '%Y-%m-%d') 
memory.date = db.DateProperty(self.request.get('date')) 
memory.date = self.request.get('date') (wishful thinking I guess) 

и несколько других вариантов я даже не могу сейчас вспомнить. Все, что я стараюсь ведет к ImportError с гигантским трассировки стека, оканчивающиеся на:

: Нет модуль с именем _multiprocessing арг = («Нет модуль с именем _multiprocessing») сообщение = «Нет модуль с именем _multiprocessing не»

Я понятия не имею, что с этим делать.

Я пришел из мира PHP, где strtotime() была моей магической функцией, которая давала мне все необходимое для конверсий, а функция date() могла обрабатывать остальную часть форматирования. Теперь я вижу вещи с встроенными функциями лямбда (?), А что нет.

Что мне недостает в чем-то, что кажется таким простым.

ответ

0

, возможно, вы используете неправильный класс? Я не уверен, какой тип вашей модели следует принять

но попробовать:

from datetime import datetime 

myValue = datetime.strptime(self.request.get('date'), '%Y-%m-%d') 

Я использую объект типа DateTime в MySQL с MySQLdb (и поля даты и времени)

... также вы можете try

from datetime import datetime 

myValue = datetime.strptime(self.request.get('date'), '%Y-%m-%d').date() 

(извещение [obj].date() в конце)

0

Вы были правы с strptime:

>>> dt = time.strptime('2009-07-21', '%Y-%m-%d') 
>>> dt 
    time.struct_time(tm_year=2009, tm_mon=7, tm_mday=21, tm_hour=0, tm_min=0, tm_sec 
    =0, tm_wday=1, tm_yday=202, tm_isdst=-1) 
>>> 

Вы получили структуру, которая может быть использована другими функциями. Например, дата отображения в M/D/Y конвенции:

>>> time.strftime('%m/%d/%Y', dt) 
'07/21/2009' 

Другой пример (модуль DateTime импорта):

>>> dt = datetime.datetime.strptime('2009-07-21', '%Y-%m-%d') 
>>> td = datetime.timedelta(days=20) 
>>> dt+td 
datetime.datetime(2009, 8, 10, 0, 0) 
+0

для этого вам нужно «импортировать время» –

+0

Спасибо за ответ. Я все еще не совсем понимаю, как это поможет мне инициализировать переменную date с любой введенной пользователем строкой (при условии, что формат Y-m-d) – Shane

+0

У меня время импортируется. И я должен пояснить, что функция strptime работает сама по себе, но как только я пытаюсь прикрепить что-либо к моей переменной даты, это то, когда вещи разваливаются, и я получаю ImportError – Shane

0

Да, РНР намного лучше. Я использую эту библиотеку

http://labix.org/python-dateutil

>>> import dateutil.parser 
>>> dateutil.parser.parse("may 2 1984") 
datetime.datetime(1984, 5, 2, 0, 0) 
Смежные вопросы