Ho uno script python che utilizza questa chiamata per ottenere la data di ieri nel formato AAAA-MM-DD:Ottenere la data di ieri in Python, DST-safe
str(date.today() - timedelta(days=1)))
Funziona maggior parte del tempo, ma quando il Lo script è stato pubblicato stamattina allo 2013-03-11 0:35 CDT
restituito "2013-03-09"
anziché "2013-03-10"
.
Presumibilmente l'ora legale (che è iniziata ieri) è la colpa. Immagino che il modo in cui è implementato lo timedelta(days=1)
sia stato sottratto 24 ore e 24 ore prima che lo 2013-03-11 0:35 CDT
sia stato 2013-03-09 23:35 CST
, il che ha portato al risultato di "2013-03-09"
.
Allora, qual è un buon modo DST-safe per ottenere la data di ieri in python?
UPDATE: Dopo bukzor ha sottolineato che il mio codice dovrebbe aver funzionato correttamente, sono tornato allo script e stabilito che non è stato utilizzato. Imposta il valore predefinito, ma uno script della shell wrapper stava impostando la data in modo esplicito. Quindi il bug è nello script della shell, non nello script python.
Un tale problema si verifica solo con un oggetto datetime timezeone, che "date.today()" non lo è. In che modo esattamente l'oggetto è istanziato? – bukzor
@bukzor hai ragione. Si scopre che uno script di shell stava passando la data sbagliata, vedere il mio aggiornamento sopra. –
Questa domanda dovrebbe essere chiusa; l'OP afferma che il suo bug è altrove. –