Wie erhalte ich das aktuelle Datum und die aktuelle Uhrzeit nur in Django?

81

Bei der Verwendung dieser Klasse bin ich auf eine interessante Situation gestoßen:

class Company(models.Model):
    date = models.DateField()
    time = models.TimeField()
c = Company(date=datetime.datetime.now(), time=datetime.datetime.now()) 

Django entscheidet sich für die Verwendung DATETIME_INPUT_FORMATSin der Datei formats.py . Was Sinn macht, weil ich in datetime.now()beiden Bereichen übergebe.

Ich glaube , ich könnte Django machen zu verwenden DATE_INPUT_FORMATSund TIME_INPUT_FORMATSjeweils , wenn ich nur das aktuelle Datum übergeben und die aktuelle Uhrzeit in.

Etwas wie das:

c = Company(date=datetime.date.now(), time=datetime.time.now()) 

Aber dies löst offensichtlich eine Ausnahme aus, da es das jetzt nicht mehr gibt. Gibt es einen anderen Weg, um dies zu erreichen?

Houman
quelle

Antworten:

144

Für das Datum können Sie datetime.date.today()oder verwenden datetime.datetime.now().date().

Für die Zeit können Sie verwenden datetime.datetime.now().time().


Warum haben diese jedoch überhaupt separate Felder? Warum nicht eine einzige verwenden DateTimeField?

Sie können jederzeit Hilfsfunktionen für das Modell definieren, die das .date()oder das .time()spätere zurückgeben, wenn Sie nur das eine oder das andere möchten.

Bernstein
quelle
Es funktioniert Amber vielen Dank. :) Kann in 5 min akzeptieren. Der Grund, warum ich das so brauche, ist die Internationalisierung und die Übersetzung amerikanischer Zeit- und Datumsformate in den Rest der Welt. :)
Houman
5
Für die Zeitzonenunterstützung ist es meiner Meinung nach immer noch besser, ein DateTimeField zu verwenden, um immer die UTC-Uhrzeit zu speichern und das Datum dann zur Abfragezeit in die aktuelle Zeitzone zu transponieren.
Joucks
@Kave Ja, was Piouk gesagt hat. Verwenden Sie ein DateTimeField, das UTC speichert und nur dann in die relevante Zeitzone übersetzt (mit etwas Ähnlichem pytz), wenn Sie die Uhrzeit anzeigen. Dies ist nicht nur eine bessere Art der Speicherung, sondern Sie erhalten auch eine kostenlose Zeitzonenbehandlung, da diese pytzbereits für Sie geschrieben wurde.
Amber
64
import datetime
datetime.datetime.now().strftime ("%Y%m%d")
20151015

Für die Zeit

from time import gmtime, strftime
showtime = strftime("%Y-%m-%d %H:%M:%S", gmtime())
print showtime
2015-10-15 07:49:18
Abdul Razak
quelle
25
import datetime

datetime.date.today()  # Returns 2018-01-15

datetime.datetime.now() # Returns 2018-01-15 09:00
Ethan Brimhall
quelle
2
Beste Antwort bisher!
Shougo Makishima
5
 import datetime

Aktuelles Datum und Uhrzeit

     print(datetime.datetime.now())
     #2019-09-08 09:12:12.473393

Nur aktuelles Datum

     print(datetime.date.today())
     #2019-09-08

Nur aktuelles Jahr

     print(datetime.date.today().year)
     #2019

Nur aktueller Monat

     print(datetime.date.today().month)
     #9

Nur aktueller Tag

     print(datetime.date.today().day)
     #8
Muhammad Faizan Fareed
quelle