2015-06-30 16 views
5

C'è un modo per verificare se un fuso orario specifico è in ora legale in una data specificata?Come determinare se una data specifica del fuso orario nel passato è l'ora legale o non in python?

test_dt = datetime(year=2015, month=2, day=1) 
    pst = pytz.timezone('America/Los_Angeles') 
    test_dt = pst.localize(test_dt) 

    # should return False 
    is_day_light_saving(test_dt)   
+0

Dove si trova il fuso orario? –

+0

Dovrebbe essere arbitrario, ma l'esempio è 'America/Los_Angeles' – Kevin

+0

possibile duplicato di [Python ora legale] (http://stackoverflow.com/questions/2881025/python-daylight-savings-time) –

risposta

5

Basta chiamare the datetime.dst() method:

def is_summer_time(aware_dt): 
    assert aware_dt.tzinfo is not None 
    assert aware_dt.tzinfo.utcoffset(aware_dt) is not None 
    return bool(aware_dt.dst()) 

Esempio:

#!/usr/bin/env python 
from datetime import datetime 
import pytz # $ pip install pytz 

naive = datetime(2015, 2, 1) 
pacific = pytz.timezone('America/Los_Angeles') 
aware = pacific.localize(naive, is_dst=None) 

print(is_summer_time(aware)) 

È equivalente a:

bool(pytz.timezone('America/Los_Angeles').dst(datetime(2015, 2, 1), is_dst=None)) 
-1

Nella mia esperienza, i dati fuso orario è più facilmente affrontato ti pandas sensibile al mezona.Timestamp() di datetime. Sono abbastanza sicuro che la sensibilità al fuso orario deduca l'ora legale dalla data stessa. È banale convertire la data/ora in pandas.timestamp() convertendola prima in numpy.datetime64.

Timestamp(numpy.datetime64('2012-05-01T01:00:00.000000')) 

http://wesmckinney.com/blog/easy-high-performance-time-zone-handling-in-pandas-0-8-0/

python pandas TimeStamps to local time string with daylight saving

Converting between datetime, Timestamp and datetime64

Inoltre si può provare a guardare il codice sorgente panda e capire come si deduce le informazioni tz. https://github.com/pydata/pandas/blob/master/pandas/src/datetime/np_datetime.c