6 votes

Django DateTimeField à comparer avec datetime.now()

J'ai un DateTimeField :

class Assignment (models.Model):
   official_deadline = models.DateTimeField(null=True, blank=True)

J'ai besoin de la comparer à la date et à l'heure actuelles, j'ai essayé :

def official_deadline_past(self):
    if datetime.datetime.today() > self.official_deadline:
        return True
    return False

Mais il revient toujours False J'ai également essayé :

def official_deadline_past(self):
    if datetime.datetime.now() > self.official_deadline:
        return True
    return False

Mais j'ai le même problème.

J'ai une information sur le terrain : 2011-07-02 00:00:00 par exemple sous la forme générée par ModelForm

0voto

johnjamesmiller Points 375

J'ai rencontré un problème similaire en comparant DateTimeField avec datetime sous python 2.7.3 et django 1.3.1.

Je ne pense pas que DateTimeField avait un bon support des fuseaux horaires à l'époque ou je ne l'avais pas configuré correctement.

Lorsque je spécifie un fuseau horaire pour le champ datetime, toutes mes comparaisons de DateTimeField > datetime échouent.

datetime utilisait l'heure centrale locale alors que DateTimeField était entré en heure de l'Est.

J'ai fini par mettre un hack stupide pour ajouter un timedelta(hours=1) à l'objet datetime central pour le "convertir" en eastern.

0voto

Nelson Poon Points 1

J'ai le même problème, le modèle django Datetime Field ne contient que la date (sans l'heure).

now = datetime.datetime.now()

q1=Q()
q1.children.append(Q(datetimefieldFrom__lte=now))
q1.children.append(Q(datetimefieldTo__gte=now))

ex. now : "2020-12-11 17:17:58.000000" datetimeFrom : "2020-12-11 16:17:58.000000" datetimeFrom : "2020-12-11 18:17:58.000000"

il passe juste "2020-12-11 00:00:00.000000" pour comparer

@johnjamesmiller, votre problème de fuseau horaire peut être résolu en modifiant le fichier setting.py.

TIME_ZONE = 'Asia/Hong_Kong'

USE_TZ = True

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X