2012-10-19 9 views
7

Sto cercando di edulcorare objectIds timestamp con py-pretty ma continua a darmi un TypeError:Mongo ObjectID: "non si può paragonare compensato naive e offset-aware datetimes" Anche con pytz

TypeError: can't compare offset-naive and offset-aware datetimes 

anche dopo Tento di convertire il timestamp in una data UTC ignota nel fuso orario con Pytz. Questo è il codice che sto cercando

import datetime 
import pytz 
import pretty 
# ... 

song = db.songs.find_one({ 'GUID' :}) 
dateTimeUnaware = song['_id'].generation_time.now(pytz.utc) 
prettyDate = pretty.date(dateTimeUnaware) 

Perché continua a darmi l'errore di tipo? La funzione pytz non dovrebbe rendere agonostico il fuso orario?

+0

Quello che hai c'è un fuso orario datetime consapevoli che è non agnostico ... avere il pytz.utc gli dà un fuso orario di utc. Rimozione che dovrebbe risolvere il tuo problema 'dateTimeUnaware = song ['_ id']. Generation_time.now()' – Pykler

risposta

18

Non sono un esperto di py-pretty, ma il tuo codice non converte la data di timezone in data sconosciuta nel fuso orario.

Richiede solo la data corrente (utilizzando now) nel fuso orario utc (in base al fuso orario).

È possibile ingenuamente convertire datetime tz-aware per tz-inconsapevoli uno utilizzando:

your_datetime_var.replace(tzinfo=None) 

nel tuo caso:

song['_id'].generation_time.replace(tzinfo=None) 

nota che "ingenuamente" in questo caso significa che tutti i campi relativi a data e ora avranno lo stesso valore di quello originale, ma le informazioni sul fuso orario e sull'ora legale andranno perse.

BTW Sembra PY-pretty è più mantenuto (ultimo caricamento a PyPI nel 2010, il codice sorgente inaccessibile) quindi potrebbe essere una buona idea per cercare di sostituzione

Problemi correlati