530 Stimmen

RuntimeWarning: DateTimeField hat ein nicht lokalisiertes Datum und Uhrzeit erhalten

Ich versuche, eine einfache E-Mail mit IPython zu senden. Ich habe noch keine Modelle eingerichtet, bekomme aber trotzdem diesen Fehler. Was kann getan werden?

Fehler: /home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/models/fields/init.py:827: RuntimeWarning: DateTimeField hat ein naives Datum/Uhrzeit (2013-09-04 14:14:13.698105) erhalten, während die Unterstützung für Zeitzonen aktiv ist. RuntimeWarning)

Versucht: Der erste Schritt ist, USE_TZ = True zu Ihrer Einstellungsdatei hinzuzufügen und pytz zu installieren (wenn möglich).

Fehler geändert:

(learn)sourabh@sL:~/Django/learn/event$ python manage.py shell
/home/sourabh/Django/learn/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:53: RuntimeWarning: SQLite hat ein naives Datum/Uhrzeit (2013-09-05 00:59:32.181872) erhalten, während die Unterstützung für Zeitzonen aktiv ist.
  RuntimeWarning)

738voto

kravietz Punkte 9651

Das Problem liegt nicht in den Django-Einstellungen, sondern im Datum, das an das Modell übergeben wird. So sieht ein zeitzonebewusstes Objekt aus:

>>> from django.utils import timezone
>>> import pytz
>>> timezone.now()
datetime.datetime(2013, 11, 20, 20, 8, 7, 127325, tzinfo=pytz.UTC)

Und hier ist ein naives Objekt:

>>> from datetime import datetime
>>> datetime.now()
datetime.datetime(2013, 11, 20, 20, 9, 26, 423063)

Wenn Sie das E-Mail-Datum an irgendeiner Stelle übergeben (und es schließlich zu einem Modell gelangt), verwenden Sie einfach now() von Django. Wenn nicht, liegt wahrscheinlich ein Problem mit einem vorhandenen Paket vor, das das Datum ohne Zeitzone abruft, das Paket patchen, die Warnung ignorieren oder USE_TZ auf False setzen.

217voto

dmrz Punkte 1913

Verwenden Sie die django.utils.timezone.make_aware Funktion, um Ihre naiven Datums- und Zeitobjekte zeitzonebewusst zu machen und diese Warnungen zu vermeiden.

Es konvertiert ein naives Datums- und Zeitobjekt (ohne Zeitzoneninformation) in eines, das Zeitzoneninformation enthält (unter Verwendung der in Ihren Django-Einstellungen angegebenen Zeitzone, wenn Sie sie nicht explizit als zweites Argument angeben):

import datetime
from django.conf import settings
from django.utils.timezone import make_aware

naive_datetime = datetime.datetime.now()
naive_datetime.tzinfo  # None

settings.TIME_ZONE  # 'UTC'
aware_datetime = make_aware(naive_datetime)
aware_datetime.tzinfo  #

70voto

Sachin G. Punkte 1642

Nur um den Fehler zu beheben, um die aktuelle Uhrzeit einzustellen

from django.utils import timezone
import datetime

datetime.datetime.now(tz=timezone.utc) # Sie können diesen Wert verwenden

26voto

Jay Soni Punkte 461

Stellen Sie sicher settings.py hat USE_TZ = True

In Ihrer Python-Datei:

from django.utils import timezone

timezone.now() # verwende seinen Wert im Modellfeld

25voto

gies0r Punkte 3735

Schnell und einfach - Schalte es aus:

USE_TZ = False

in Ihrer settings.py

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X