当前位置: 首页 > 工具软件 > TZInfo > 使用案例 >

5.1.6 tzinfo对象

阎修明
2023-12-01

tzinfo是抽象基类,不能直接实例化。因此需要创建一个派生类,并且至少实现三个方法,才可以使用。在timezone里已经实现北美的ESTEDT时区的时间。

tzinfo的实例可以传送给datetime对象和time对象,以便指定特定的时区。tzinfo对象主要用来表示与UTC时间差距,以及时区的名称,夏时制的相对时间。

一个派生类应实现下面的方法:

tzinfo.utcoffset(dt) 

返回当地时间与UTC时间的差距。如果时区在UTC的西边,应采用负数来表示。这里值得注意的是:当有夏时制时,可以直接在这里把时区时间差和夏时制的时间差加到一起返回来。比如:

return CONSTANT                 # fixed-offset class

return CONSTANT + self.dst(dt)  # daylight-aware class

并且当utcoffset不返回None时,dst()也不应返回None

 

tzinfo.dst(dt) 

返回夏时制的时间调整差值。如果夏时制没有效,返回timedelta(0)。如果夏时制有效,按utcoffset()格式返回。一般情况下,都是把夏时制的时间差放在utcoffset里一起返回,除非你想区分时区的时间差和夏时制的时间差。例如:

def dst(self, dt):

    # a fixed-offset class:  doesn't account for DST

    return timedelta(0)

或者

def dst(self, dt):

    # Code to set dston and dstoff to the time zone's DST

    # transition times based on the input dt.year, and expressed

    # in standard local time.  Then

 

    if dston <= dt.replace(tzinfo=None) < dstoff:

        return timedelta(hours=1)

    else:

        return timedelta(0)

 

tzinfo.tzname(dt) 

返回时区的名称字符串。返回的格式可以这样:“GMTUTC-500-5:00EDTUS/EasternAmerica/New York”。

 

上面这三个方法,实现之后都由datetimetime对象进行调用,是最基本的方法,下面学习另外一些方法,不是必须实现的。

 


蔡军生  QQ:9073204  深圳

 类似资料: