当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python datetime.tzinfo()用法及代码示例


DateTime类提供各种函数来操纵日期和时间间隔。您在其中使用的DateTime对象datetime.now()实际上是DateTime类的对象。这些对象帮助我们使用日期和时间上的函数。

注意:有关更多信息,请参见带有示例的Python datetime模块。

DateTime.tzinfo()

datetime.now()没有有关时区的任何信息。它仅使用当前系统时间。在某些情况下,可能需要时区详细信息。在这种情况下,将使用tzinfo抽象类。 tzinfo是一个抽象基类。它不能直接实例化。一个具体的子类必须派生它并实现此抽象类提供的方法。


tzinfo类的实例可以传递给datetime和time对象的构造函数。它可以在本地时间转换为UTC或考虑夏时制的情况下找到其应用。

天真和感知日期时间对象

不包含有关时区的任何信息的datetime对象被称为是朴素的datetime对象。对于朴素的日期时间对象,datetime_object.tzinfo将会None。 Aware datetime对象包含嵌入其中的时区信息。

tzinfo基类中可用于实现的方法有:

  • utcoffset(self, dt)
  • dst(self, dt)
  • tzname(self, dt)
  • fromutc(self, dt)

utcoffset()

它返回作为参数传递的datetime实例的偏移量。

这个偏移量是指什么?

它指的是时区偏移量,它表示时区距离世界标准时间或世界标准时间(UTC)提前了几个小时。偏移量写为+00:00。例如:对于亚洲/台北,它表示为UTC +08:00。

它占用日期时间对象的时间,并返回日期时间对象中的时间与UTC中同一点的时间之间的差。它返回UTC以东的分钟数偏移量。如果当地时间在UTC西部,则为负。通用的实现形式如下:

For fixed offset:

 def utcoff(self, dt):
      return constant

For time aware objects:

def utcoffset(self, dt):
        return self.stdoffset + self.dst(dt)

dst()

缩写为夏令时。它表示在夏季时间提前1个小时,因此黑暗会根据时钟而下降。设置为开或关。根据包含9个元素的元组检查它,如下所示:

(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, 0)

编写私有函数以根据这9个元素返回0、1或-1。根据该值dst(self, dt)确定。该函数写在类中dst()被定义为。它写为:


def _isdst(self, dt):
  
        tt = (dt.year, dt.month, dt.day, 
              dt.hour, dt.minute, dt.second, 
              dt.weekday(), 0, 0) 
  
        stamp = _time.mktime(tt) 
        tt = _time.localtime(stamp) 
  
        return tt.tm_isdst > 0

这里mktime()接受此元组并将其转换为自当地时间开始经过的秒数。然后,tm_isdst()与mktime一起使用。它返回如下值:

‘1’ - Daylight Saving ON
‘0’ - Daylight Saving OFF
‘-1’ - Daylight Saving information unknown

将此代码添加到类后,dst()可以根据条件定义如下。

For fixed offset class:

 def dst(self, dt):
        return ZERO

For time aware objects:

 def utcoffset(self, dt):
        if self._isdst(dt):
            return DSTOFFSET
        else:
            return STDOFFSET

tzname()

这用于查找传递的datetime对象的时区名称。它返回一个Python String对象。

例:

import datetime as dt 
from dateutil import tz 
  
  
tz_string = dt.datetime.now(dt.timezone.utc).astimezone().tzname() 
  
print("datetime.now():", tz_string) 
  
NYC = tz.gettz('Europe / Berlin')   
dt1 = dt.datetime(2015, 5, 21, 12, 0)  
dt2 = dt.datetime(2015, 12, 21, 12, 0, tzinfo = NYC)  
  
print("Naive Object:", dt1.tzname()) 
print("Aware Object:", dt2.tzname())
输出:
datetime.now():UTC
Naive Object:None
Aware Object:CET

fromutc()

此函数使用UTC占用对象的日期和时间,并返回等效的本地时间。它主要用于调整日期和时间。默认调用datetime.astimezone()实施。 dt.tzinfo将作为self传递,dt的日期和时间数据将作为等效的当地时间返回。

注意:它会上升ValueError如果dt.tzinfo不是self或/并且dst()为None。

一般实现如下:

def fromutc(self, dt):
    dt_offset = dt.utcoffset()
    dt_dst = dt.dst()
    delta = dt_offset - dt_dst  
               
    if delta:
          dt += delta   
          dtdst = dt.dst()
          
    if dtdst:
          return dt + dtdst
    else:
          return dt



注:本文由纯净天空筛选整理自erakshaya485大神的英文原创作品 Python – datetime.tzinfo()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。