/ / Converti il ​​datetime nativo UTC in datetime nativo dei denti orientali per pymongo-python, timezone, pymongo, pytz

Converti il ​​datetime nativo UTC in datetime nativo dei denti orientali per pymongo-python, timezone, pymongo, pytz

Ho bisogno di interrogare un mongodb che salva le sue datenel fuso orario locale (orientale), ma sto lavorando in UTC. Come posso convertire un datetime nativo UTC in datetime nativo dei denti orientale per pymongo, tenendo conto dell'ora legale?

risposte:

1 per risposta № 1

Per convertire un oggetto datetime ingenuo che rappresenta il tempo in UTC in un fuso orario diverso:

from datetime import datetime
import pytz

tz = pytz.timezone("US/Eastern") #NOTE: deprecated timezone name

naive_utc_dt = datetime.utcnow()                # naive datetime object
utc_dt = naive_utc_dt.replace(tzinfo=pytz.utc)  # aware datetime object
east_dt = utc_dt.astimezone(tz)                 # convert to Eastern timezone
naive_east_dt = east_dt.replace(tzinfo=None) #XXX use it only if you have to

Nota: se il fuso orario sorgente non è UTC, allora .localize(), .normalize() metodo dovrebbe essere usato

pytz ti permette di gestire le variazioni di offset dell'UTC (non solo a causa dell'ora legale) per una data regione: oggi, in passato (molte librerie falliscono qui).


0 per risposta № 2

Non sono sicuro se questo è ciò che intendi:

http://docs.python.org/2/library/datetime.html#datetime.datetime.astimezone

Ti permette di cambiare appuntamento da un fuso orario all'altro.


0 per risposta № 3

Dopo un po 'di più, ho trovato questa domanda, che mi ha portato alla risposta.

  1. Imposta il fuso orario UTC sull'orario UTC nativo
  2. Convertilo in oriente
  3. Ottieni l'offset UTC come timedelta
  4. Aggiungilo al datetime originale
ET = pytz.timezone("America/New_York")

def utc_to_et(utcdt):
utc_with_tz = utcdt.replace(tzinfo=pytz.UTC)
offset = utc_with_tz.astimezone(ET).utcoffset()
return utcdt + offset

0 per risposta № 4

Si noti inoltre che se la connessione Mongo non viene aperta in base al fuso orario, si ottiene semplicemente un datetime ingenuo dal database.

from pymongo import Connection
# Create a timezone aware connection
connection = Connection("localhost", 27017, tz_aware=True)