2012-05-19 18 views
8

Tengo una fecha y hora ingenua en el formato '2012-05-19 19:13:00' y necesito almacenarla usando Django 1.4 y sus capacidades de zona horaria.Cómo almacenar una fecha de inicio ingenua en Django 1.4

Aunque no hay forma de saber en qué zona horaria está originalmente la fecha, parece tener sentido almacenarla como si fuera UTC.

Sin embargo, al usar pytz, etc., no estoy seguro de cómo convertir una fecha que no tiene zona horaria en una fecha y hora UTC.

Respuesta

6

Si no tiene tzinfo, por supuesto no puede haber conversión a UTC. En lugar de ello sólo podría hacer que el objeto de fecha y hora en una zona horaria consciente de uno:

import datetime 
from pytz import UTC 

dt = datetime.datetime.now() # just some date 
tz_aware_dt = dt.replace(tzinfo=UTC) 

Editar:

El migration guide for django 1.4 utiliza esto para lograr lo anterior:

>>> from django.utils.dateparse import parse_datetime 
>>> naive = parse_datetime("2012-02-21 10:28:45") 
>>> import pytz 
>>> pytz.timezone("Europe/Helsinki").localize(naive) 
datetime.datetime(2012, 2, 21, 10, 28, 45, tzinfo=<DstTzInfo 'Europe/Helsinki' EET+2:00:00 STD>) 

Probablemente debería usar esa versión, sustituyendo "Europa/Helsinki" por "UTC".

+0

Brillante, gracias. Hacer 'pytz.UTC.localize (ingenuo)' parece hacer el truco. –

Cuestiones relacionadas