¿Cómo obtengo la fecha actual y la hora actual solo respectivamente en Django?

81

Me encontré con una situación interesante al usar esta clase:

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

Django decide usar DATETIME_INPUT_FORMATSdefinido dentro del archivo Format.py . Lo que tiene sentido, porque estoy pasando datetime.now()a ambos campos.

Creo que podría hacer que Django use DATE_INPUT_FORMATSy TIME_INPUT_FORMATSrespectivamente, si pasara solo la fecha actual y la hora actual en.

Algo como esto:

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

Pero esto obviamente arroja una excepción ya que ahora no existe así. ¿Existe una forma diferente de lograrlo?

Houman
fuente

Respuestas:

146

Para la fecha, puede usar datetime.date.today()o datetime.datetime.now().date().

Por el momento, puede usar datetime.datetime.now().time().


Sin embargo, ¿por qué tener campos separados para estos en primer lugar? ¿Por qué no usar uno DateTimeField?

Siempre puede definir funciones auxiliares en el modelo que devuelven el .date()o .time()posterior si solo desea uno u otro.

Ámbar
fuente
Funciona Amber muchas gracias. :) Puede aceptar en 5 min. La razón por la que lo necesito de esta manera es por la internacionalización y la traducción de los formatos de fecha y hora estadounidenses al resto del mundo. :)
Houman
5
Para el soporte de la zona horaria, creo que es mejor usar un DateTimeField para almacenar siempre la fecha y hora UTC y luego transponer la fecha a la zona horaria actual en el momento de la consulta.
Joucks
@Kave Sí, lo que dijo piouk. Use un DateTimeField que almacene UTC y solo se traduzca a la zona horaria relevante (usando algo como pytz) cuando vaya a mostrar la hora. Esta no solo es una mejor forma de almacenamiento, sino que también obtiene el manejo de la zona horaria de forma gratuita porque pytzya fue escrito para usted.
Ámbar
64
import datetime
datetime.datetime.now().strftime ("%Y%m%d")
20151015

Por el momento

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

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

datetime.datetime.now() # Returns 2018-01-15 09:00
Ethan Brimhall
fuente
2
¡La mejor respuesta hasta ahora!
Shougo Makishima
5
 import datetime

Fecha y hora actual

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

Solo fecha actual

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

Solo año actual

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

Solo mes actual

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

Solo día actual

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

Otra forma de obtener la fecha y hora UTC con milisegundos.

from datetime import datetime

datetime.utcnow().isoformat(sep='T', timespec='milliseconds') + 'Z'

2020-10-29T14:46:37.655Z
Bruno Wego
fuente