2011-09-29 18 views
11

Tôi đang tìm một phương pháp xác định khi nào DST bắt đầu hoặc kết thúc cho một múi giờ nhất định trong một tập lệnh Python mà tôi đang làm việc.Làm thế nào để xác định khi nào DST bắt đầu hoặc kết thúc ở một vị trí cụ thể trong Python?

Tôi biết pytz có thể chuyển đổi ngày UTC tôi đang làm việc thành giờ địa phương và sẽ tính đến DST, tuy nhiên đối với ứng dụng cụ thể này, tôi cần phải biết điểm chuyển đổi.

Mọi đề xuất?

+2

Mà năm ? Điểm thay đổi DST đã thay đổi trong lịch sử ở một số múi giờ. – eumiro

+0

Vâng, lý tưởng tôi muốn có thể làm điều đó trong một năm tùy ý. Tôi biết loại thông tin này có sẵn trong cơ sở dữ liệu Olsen, nhưng việc truy cập nó là một vấn đề khác. – Smingos

Trả lời

14

Bạn có thể xem qua thành viên _utc_transition_times của múi giờ bạn đang sử dụng.

>>> from pytz import timezone 
>>> tz = timezone("Europe/Paris") 
>>> print tz._utc_transition_times 

[datetime.datetime(1, 1, 1, 0, 0), datetime.datetime(1911, 3, 10, 23, 51, 39), datetime.datetime(1916, 6, 14, 23, 0), datetime.datetime(1916, 10, 1, 23, 0), date 
.... 
datetime.datetime(2037, 3, 29, 1, 0), datetime.datetime(2037, 10, 25, 1, 0)] 

Nó sẽ cung cấp cho bạn danh sách ngày thay đổi DST (bắt đầu và kết thúc DST).

Theo mã của tzinfo.py

class DstTzInfo(BaseTzInfo): 
    '''A timezone that has a variable offset from UTC 

    The offset might change if daylight savings time comes into effect, 
    or at a point in history when the region decides to change their 
    timezone definition. 
    ''' 
    # Overridden in subclass 
    _utc_transition_times = None # Sorted list of DST transition times in UTC 
    _transition_info = None # [(utcoffset, dstoffset, tzname)] corresponding 
          # to _utc_transition_times entries 

Vì vậy, nếu bạn trộn _utc_transition_times với _transition_info bạn sẽ lấy tất cả của bạn thông tin cần thiết, ngày, giờ và bù đắp để áp dụng;)

+0

Điều này có vẻ rất tốt. Không biết về thuộc tính đó. – eumiro

+0

Tôi sẽ thử ngay khi tôi về nhà, cảm ơn. Những ngày đó có đánh dấu điểm bắt đầu hoặc kết thúc của DST không? – Smingos

+0

Đối với châu Âu/Paris, khởi đầu của DST chủ yếu là vào tháng 3, kết thúc vào tháng 9/tháng 10. Nhưng vì những ngày này là __changes__, bạn có thể đếm trên vị trí lẻ/chẵn trong danh sách này. – eumiro

Các vấn đề liên quan