python–datetime . tzinfo()
哎哎哎:# t0]https://www . geeksforgeeks . org/python-datetime-tzinfo/
DateTime 类提供了各种函数来操作日期和时间间隔。您在datetime.now()
中使用的日期时间对象实际上是日期时间类的对象。这些对象帮助我们使用日期和时间函数。
注意:更多信息请参考 Python 日期时间模块,示例
DateTime.tzinfo()
datetime.now()
没有任何关于时区的信息。它只是使用当前的系统时间。在某些情况下,可能需要时区详细信息。在这种情况下,使用 tzinfo 抽象类。tzinfo 是一个抽象基类。它不能直接实例化。一个具体的子类必须派生它并实现这个抽象类提供的方法。
tzinfo 类的实例可以传递给 datetime 和 time 对象的构造函数。它适用于将当地时间转换为世界协调时或考虑夏令时的情况。
天真和感知日期时间对象
不包含任何时区信息的日期时间对象被称为“T2”天真日期时间对象“T3”。对于天真的日期时间对象,datetime_object.tzinfo
将是None
。感知日期时间对象包含嵌入其中的时区信息。
tzinfo 基类中可实现的方法有:
- utcoffset(自我、dt)
- dst(自我,dt)
- tzname(自我、dt)
- fromutc(自我,dt)
utcoffset()
它返回作为参数传递的 datetime 实例的偏移量。
这个偏移量指的是什么?
它指的是时区偏移,表示时区比协调世界时或世界时坐标(UTC)提前了多少小时。偏移量写成+00:00。例如:对于亚洲/台北,写成 UTC +08:00。
它占用 datetime 对象的时间,并返回 datetime 对象中的时间与 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()
缩写为Day-lightSaviTime。它表示在夏季将时钟提前 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”–夏令时开启 “0”–夏令时关闭 “-1”–夏令时信息未知
将该代码添加到类中后,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 字符串对象。
示例:
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())
Output:
datetime.now() : UTC
Naive Object : None
Aware Object : CET
fromutc()
该函数采用对象的日期和时间(以世界协调时表示),并返回等效的当地时间。它主要用于调整日期和时间。从默认datetime.astimezone()
实现调用。dt.tzinfo 将作为自身传递,dt 的日期和时间数据将作为等效的当地时间返回。
注意:如果 dt.tzinfo 不是 self 或/和 dst()为 None,将会提升ValueError
。
下面给出了一般实现:
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
版权属于:月萌API www.moonapi.com,转载请注明出处