web-dev-qa-db-fra.com

Analyser une chaîne Datetime dans un Django DateTimeField

J'ai une application Django avec un modèle qui contient un champ de type DateTimeField.
Je récupère des données du Web au format 2008-04-10 11:47:58-05.
Je crois que les 3 derniers caractères de cet exemple sont le fuseau horaire.
Comment puis-je conserver ces données dans DateTimeField et y a-t-il une conversion facile entre les deux? La définition de DateTimeField pour contenir simplement une chaîne du format ci-dessus déclenche une ValidationError.

Je vous remercie!

29
user1094786

Vous pouvez utiliser

import dateutil.parser
dateutil.parser.parse('2008-04-10 11:47:58-05')

Qui retourne un datetime (qui peut être assigné au DateTimeField).

42
nisc

J'utilise ceci:

from Django.utils.timezone import get_current_timezone
from datetime import datetime
tz = get_current_timezone()
dt = tz.localize(datetime.strptime(str_date, '%m/%d/%Y'))
10
Paul Tomblin

Si vous utilisez Django Forms, vous pouvez spécifier input_formats à votre DateField. Voir la documentation DateField

Si vous souhaitez analyser des informations de date arbitraires , vous pouvez utiliser quelque chose comme parsedatetime et implémenter une méthode qui Django appelle pour effectuer l'analyse avant qu'il n'atteigne les validateurs. (Voir this SO answer pour un bon résumé du fonctionnement des validations et du moment de l'insertion) leur)

3
RyanWilcox

Format de chaîne de Django DateTimeField est "% Y-% m-% dT% H:% M:% S.% fZ". Par conséquent, la conversion entre eux peut être effectuée à l'aide de strptime () ou strptime () utilisant ce format.

par exemple. pour une valeur au format chaîne (2016-10-03T19: 00: 00.999Z), elle peut être convertie en Django objet datetime comme:

from datetime import datetime

datetime_str = '2016-10-03T19:00:00.999Z'

datetime_object = datetime.strptime(datetime_str, "%Y-%m-%dT%H:%M:%S.%fZ")
0
RameshD