有没有人为澳大利亚各州的时区转换python代码?

时间:2017-03-29 05:20:09

标签: python python-2.7 python-3.x

我认为有可能存在陷阱,但忽略了已知的问题案例,只考虑其他常见的时间价值,是否有人写过函数在澳大利亚的不同州(忽略外部地区)进行澳大利亚时区转换?

我知道有pytz,但该模块在这种环境下不可用,并且设置它不是一项简单的任务。

以下是我根据维基百科规范起草的代码。

# Return converted time from one Australia state timezone to another
# Assumes DST regime is post 12 April 2007 when 5 states agreed to common DST start and end day
# argument tm is a datetime/date
# accuracy benchmark vs pytz shows 5 in 100,000 discrepancy in converting random datetime values in borderline dst cases
def au_tz_convert(fromState, toState, tm):
    tz = {
         'WA' : +8
        ,'NT' : +9.5
        ,'QLD': +10
        ,'SA' : +9.5
        ,'NSW': +10
        ,'VIC': +10
        ,'ACT': +10
        ,'TAS': +10
        }

    if not(fromState in tz and toState in tz):
        raise Exception, "input state values should be in " + str(tz.keys())

    a = tz[fromState]
    b = tz[toState]

    from datetime import timedelta, datetime

    def dst(auState, tm):

      if auState in ['WA','NT','QLD']:
        return 0

      #DST start is first Sunday in October
      #DST end is first Sunday in April

      dst_start = datetime(tm.year,10,1,  2)
      dst_end   = datetime(tm.year, 4,1,  2)
      while dst_start.weekday() != 6:
        dst_start +=  timedelta( days=1 )
      while dst_end.weekday()   != 6:
        dst_end   +=  timedelta( days=1 )

      if tm < dst_end or tm >= dst_start:
        return 1
      return 0

    f = dst(fromState, tm)
    t = dst(toState  , tm)    
    return  tm + timedelta( hours = b-a + t-f )

0 个答案:

没有答案