2016-08-02 4 views
1

특정 이유로 인해 제 고용주는 제 3 자 패키지를 설치하기 위해 pip를 사용하고 싶지 않고 믿을만한 곳에서만 패키지를 사용하기를 원합니다. 따라서, 나는 이제 내 코드에서 pytz를 사용할 수 없다. 시간대의 특정 날짜가 DST에 있는지 확인하는 방법은 무엇입니까? pytz를 사용하는 원래 코드가 있습니다.날짜가 일광 절약 시간제 (피츠버그 제외)

import pytz 
    import datetime 
    ... 

    target_date = datetime.datetime.strptime(arg_date, "%Y-%m-%d") 
    time_zone = pytz.timezone('US/Eastern') 
    dst_date = time_zone.localize(target_date, is_dst=None) 
    est_hour = 24 
    if bool(dst_date.dst()) is True: 
     est_hour -= 4 
    else: 
     est_hour -= 5 
+0

미국 시간대 만 걱정 되나요? 아니면 전 세계에서 작동해야합니까? –

+0

제가 우려하는 유일한 시간대는 미국 동부입니다. – DeadCake

답변

0

일반적으로 이것은 수동 롤링 솔루션에 적용 할 수없는 복잡한 문제입니다. pytz과 같이 작업 전용 사용자가 검사하고 유지 관리하는 외부 모듈을 사용하는 것이 유일한 제정신 옵션입니다.

특히 동부 시간대에만 관심이 있다는 제약 조건을 고려하면 간단한 기능을 작성할 수 있습니다. 현재의 (2016) 규칙은 분명히 last changed in 2007이며 언제든지 다시 변경 될 수 있습니다. 이러한 규칙에는 DST starts on the second Sunday in March and ends on the first Sunday in November이 나와 있습니다.

이 코드는 my algorithm for finding a particular day of a month을 기반으로합니다.

def is_dst(dt): 
    if dt.year < 2007: 
     raise ValueError() 
    dst_start = datetime.datetime(dt.year, 3, 8, 2, 0) 
    dst_start += datetime.timedelta(6 - dst_start.weekday()) 
    dst_end = datetime.datetime(dt.year, 11, 1, 2, 0) 
    dst_end += datetime.timedelta(6 - dst_end.weekday()) 
    return dst_start <= dt < dst_end 
+0

나는 이것이 내가 pytz를 사용하지 않을 수있는만큼 가깝다고 생각한다. 도와 주셔서 감사합니다. – DeadCake

0

pip를 사용하지 않고 pytz을 설치하십시오.

DST는 임의의 지역이며 다른 지역의 법률에 따라 선택됩니다. 실제로는 계산할 수 없습니다.을 보면 문자 그대로 DST가 향후 20 년 동안 변경되는 하드 코딩 된 날짜 목록입니다.

pytz와 동일한 소스 (ZoneInfo/[또는이 링크] (http://www.iana.org/time-zones))에서 데이터를 가져 와서 직접 만들 수 있습니다. 또는 OS가 구현되어있는 경우 운영체제에 따라 달라질 수 있습니다.

(라이선스 이유가없는 경우) 고용주가 pytz 소스를보고 허용되는 수준까지 무해하고 사용 승인을 받도록하십시오.

+0

제안 해 주셔서 감사합니다. 일반적으로 pip 또는 패키지 관리자를 사용하지 않으려는 이유는 TechOps 팀이 너무 작아서 모든 언어의 패키지 관리자를 관리하지 못하고 모든 언어의 보안 업데이트로 인해 패키지를 업데이트해야하기 때문입니다. " 그들에게 고통이다 ". 나는 그들이 pip없이 pytz 설치를 승인 할 것 인 지 의심 스럽다. 다행히도 그들은 합리적이고 사용을 승인합니다. – DeadCake

관련 문제