2009-07-21 2 views
0

Je suis assez nouveau sur Python et App Engine, mais ce que j'essaye de faire est de stocker un modèle qui contient une DateProperty, et que DateProperty est rempli avec une Date entrée par l'utilisateur dans un formulaire web.Création de DateTime à partir de la date entrée par l'utilisateur

J'ai le modèle:

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

puis créer une instance avec:

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

Mais dès que j'essaie de faire quelque chose avec la valeur de date, je le casse . Je suppose - et entrer - la valeur de date dans ce format: 2009-07-21

J'ai essayé:

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) 

et quelques autres options que je ne me souviens même maintenant. Tout ce que je cherche conduit à un ImportError avec une trace de la pile géante se terminant par:

: Aucun module nommé _multiprocessing args = ('Aucun module nommé _multiprocessing',) message = 'Aucun module nommé _multiprocessing'

Je n'ai aucune idée de quoi faire de cela.

Je viens d'un monde PHP où strtotime() était ma fonction magique qui me donnait tout ce dont j'avais besoin pour les conversions, et la fonction date() pouvait gérer le reste du formatage. Maintenant, je vois des choses avec des fonctions en ligne lambda (??) et ce n'est pas le cas.

Qu'est-ce qui me manque sur quelque chose qui me semble si simple?

Répondre

0

peut-être que vous utilisez la classe ne va pas? Je ne suis pas sûr du type de votre modèle devrait prendre

mais essayez:

from datetime import datetime 

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

J'utilise un objet datetime MySQL avec MySQLdb (et un champ datetime)

... De même, vous pouvez essayez

from datetime import datetime 

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

(remarquez le [obj].date() à la fin)

0

Vous aviez raison avec 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) 
>>> 

Vous avez obtenu struct qui peut être utilisé par d'autres fonctions. Par exemple la date d'affichage dans la convention M/D/Y:

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

Un autre exemple (module import 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

pour que cela fonctionne, vous devez «importer le temps» –

+0

Merci pour la réponse. Je ne vois toujours pas comment cela va m'aider à initialiser ma variable de date avec une chaîne entrée par l'utilisateur (en supposant que le format Y-m-d) – Shane

+0

J'ai du temps à importer. Et je devrais préciser que la fonction strptime fonctionne de lui-même, mais dès que j'essaye de joindre quelque chose à ma variable de date, c'est quand les choses se décomposent et que je reçois un ImportError – Shane

0

Ouais, PHP est de beaucoup plus agréable. J'utilise cette bibliothèque

http://labix.org/python-dateutil

>>> import dateutil.parser 
>>> dateutil.parser.parse("may 2 1984") 
datetime.datetime(1984, 5, 2, 0, 0)