2012-05-19 11 views
8

Ho una data e un'ora ingenue nel formato '2012-05-19 19:13:00' e ho bisogno di memorizzarlo usando Django 1.4 e le sue abilità in base al fuso orario.Come memorizzare un datetime ingenuo in Django 1.4

Sebbene non ci sia modo di sapere in quale fuso orario la data è originariamente inserita, sembra ragionevole archiviarla come se fosse UTC.

Tuttavia, utilizzando pytz ecc., Non sono sicuro di come convertire una data che non ha fuso orario in un datetime UTC.

risposta

6

Se non ha tzinfo, ovviamente non è possibile la conversione in UTC. Invece si può solo rendere l'oggetto datetime in un fuso orario a conoscenza uno:

import datetime 
from pytz import UTC 

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

Edit:

Il migration guide for django 1.4 utilizza questo per realizzare quanto sopra:

>>> 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>) 

Probabilmente è meglio usare che versione, sostituendo "Europa/Helsinki" per "UTC".

+0

Brillante, grazie. Fare 'pytz.UTC.localize (ingenuo)' sembra fare il trucco. –

Problemi correlati