2010-05-21 9 views

risposta

51

È possibile utilizzare time.localtime e osservare il flag tm_isdst nel valore restituito.

>>> import time 
>>> time.localtime() 
(2010, 5, 21, 21, 48, 51, 4, 141, 0) 
>>> _.tm_isdst 
0 

Utilizzando time.localtime(), si può chiedere la stessa domanda per qualsiasi tempo arbitrario per vedere se l'ora legale sarebbe (o era) in vigore per il fuso orario corrente.

+0

Potrebbe essere un po 'più chiaro utilizzare la proprietà time.daylight. Restituirà un risultato diverso da zero se il fuso orario corrente ha l'ora legale. –

+7

@brian buck: è diverso però. Per un determinato fuso orario, 'time.daylight' è costante perché esiste o meno una zona diurna. D'altra parte, il flag 'tm_isdst' riflette se l'ora indicata è * entro * le date di inizio e fine dell'ora legale. –

+0

Questa confusione su 'time.daylight' sembra essere un problema più grande: http://bugs.python.org/issue7229. –

-8

Se si desidera verificare se la luce del giorno è attualmente in vigore con le impostazioni correnti del computer, utilizzare time.daylight.

>>> import time 
>>> print time.daylight 

time.daylight dice solo se il computer è attualmente in ora legale, non se il computer è "Passa automaticamente all'ora legale degli Changes" set. Per quei computer impostati su nessuna regolazione dell'ora legale, time.daylight sarà sempre 0 tutto l'anno.

Un modo per determinare se il computer si adeguerà all'ora legale durante l'anno è quello di ottenere la tupla restituita da time.tzname e se sono differenze (ad esempio, len (set (time.tzname))! = 1), quindi il computer ha la regolazione dell'ora legale attivata.

+8

'time.daylight dice solo se il computer è o non è attualmente in ora legale - questo non è vero. 'time.daylight' dice solo se il computer si trova in un fuso orario che avrà delle modifiche temporali relative a dst. Non dice nulla sul fatto che siano o meno in effetti. Questo può essere verificato con 'tm_isdst' –

+0

BTW: Documenti per tzname:' ​​Una tupla di due stringhe: la prima è il nome del fuso orario locale non-DST, il secondo è il nome del fuso orario locale dell'ora legale. Se non viene definito un fuso orario dell'ora legale, la seconda stringa non deve essere utilizzata. Quindi len potrebbe essere> 1 anche se non è definito alcun dst. –

+1

Votare per cancellare la risposta in quanto errata. –

Problemi correlati