Django datetime.timedelta , wie kann seine subtrahieren von timezone.jetzt (), wenn Sie posssibly verschiedene sets
Ich habe Schwierigkeiten zu verstehen, Funktionen, Verwendung:
time = timezone.now() - datetime.timedelta(days=30)
Erstens die Zeitzone.jetzt() liefert die Zeit, die festgelegt ist, in Django ... jetzt die datetime.timedelta(days=30)
...
verwendet es die internen Einstellungen in django als set setting.py oder ein anderes.
Zweitens wenn dem so ist ... sollten: die variable Zeit nicht 30 Tage hinter der aktuellen Zeitzone.jetzt();
In der Funktion unten
def test_was_published_recently_with_old_question(self):
"""
was_published_recently() should return False for questions whose
pub_date is older than 1 day.
"""
time = timezone.now() - datetime.timedelta(days=30)
old_question = Question(pub_date=time)
self.assertEqual(old_question.was_published_recently(), False)
wie funktioniert diese Herstellung von 1 Tag älter ... ich denke, mein Problem ist nicht das Verständnis
time = timezone.now() - datetime.timedelta(days=30)
in seiner ganz
Ich würde wirklich zu schätzen die Hilfe. Ich bin neu in python und med-level-Programmierer ... aber nicht arbeitete viel mit der Zeit.
python manage.py shell
und sehen, dass timezone.now()
ist ein datetime
Objekt, das erwartet wird, die Arbeit mit timedelta
. Unrelated: stellen Sie sicher, dass USE_TZ=True
so dass timezone.now()
gibt ein bewusst datetime-Objekt, ansonsten das Ergebnis von .was_published_recently()
können ungenau sein, siehe Finde wenn 24 Std. vergangen sind datetimes - PythonInformationsquelleAutor Curious Lambda | 2015-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst
timezone.now()
ist nur eine "verbesserte" version vondatetime.datetime.now()
, dass auch die Zeitzone beachten.Es ist kein django-internen Zeit.
timezone.now()
ist buchstäblich nur die datetime-Funktion + timezone.timedelta
dann ist nur eine Differenz, ein delta in der Physik verwendete. Es weiß nichts über die Zeit.Wenn Sie subtrahieren/addieren eines delta aus einer Zeit, machen Sie das nach, was zu der Zeit.
Also heute ist 2015-09-10. Wenn Sie einen Tag (
timedelta(days=1)
), das ist offensichtlich 2015-09-11.Einen check, ob etwas Aktueller als einen Monat in python geschieht durch Subtraktion von 30 Tagen (oder 1 Monat, wenn du magst) und dann vergleichen, wenn die eingesparte Zeit ist größer als das.
Zu verstehen, die datetime-Vergleich besser kann es helfen, konvertieren diese zu unixtime und nur sehen, diese abstrakten Dinge wie die einfachen zahlen, die durch die Verwendung der
timestamp()
Funktion:Ausgänge
Tut dies ohne Konvertierung in Zeitstempel-druckt
a month ago is smaller
zu.USE_TZ=True
;timezone.now()
zurückkehren können, eine naive datetime-ObjektInformationsquelleAutor Christopher Schäpers
Ich denke, Sie sind verwirrt von der Beschreibung der test-Methode.
Dieser Prüfmethode ist die Prüfung, dass
was_published_recently()
ordnungsgemäß funktioniert-nicht wieder diese Fragen, die älter als 1 Tag sind.Um es zu testen, was Sie tun, ist die Einstellung einer post-Datum 30 Tage weniger als heute (das ist die
- datetime.timedelta(days=30)
, und dann prüfen, obwas_published_today()
ist True oder False für das post.Wenn False, dann ist der test bestanden.
InformationsquelleAutor Burhan Khalid