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()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。