做网站如何网站考虑优化,网站建设教程,公司的logo图片,网站制作找哪个pytz模块常用于时区的转换#xff0c;常常配合datetime一起使用。我们知道datetime除了data方法生成的时间是没有时区概念#xff0c;其他如time、datetime等都是有时区概念#xff0c;即指定了tzinfo信息。 import datetimedatetime.datetime.n… pytz模块常用于时区的转换常常配合datetime一起使用。我们知道datetime除了data方法生成的时间是没有时区概念其他如time、datetime等都是有时区概念即指定了tzinfo信息。 import datetimedatetime.datetime.now(tz)
datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfoDstTzInfo Asia/Shanghai CST8:00:00 STD)datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfotz)
datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfoDstTzInfo Asia/Shanghai LMT8:06:00 STD)datetime.date(2009, 2, 21, tzinfotz)
Traceback (most recent call last):
File stdin, line 1, in module
TypeError: tzinfo is an invalid keyword argument for this functiondatetime.time(15, 12, 33, tzinfotz)
datetime.time(15, 12, 33, tzinfoDstTzInfo Asia/Shanghai LMT8:06:00 STD) 时区转换
·pytz.country_timezones(‘国家代码’)此方法可以拿到某个国家的时区名列表。 (pytz.country_timezones(cn)
[Asia/Shanghai, Asia/Urumqi] ·pytz.timezone(‘时区名’)此方法能获取一个tzinfo对象该对象可在datetime生成时间中以参数的形式放入即可生成对应时区的时间。 utc pytz.timezone(UTC)
datetime.datetime.now(tzutc)
2019-05-10 10:53:46.00092900:00 实际上现在时间为185346
·查看有哪些时区
pytz有all_timezones、common_timezones这两个属性来查看有哪些时区。 from pytz import all_timezones,common_timezones ·时间按时区转换
这要用到datetime模块的astimezone方法来实现。如下所示开始生成本地时间然后在转成utc时间。 import datetime
import pytz
utc pytz.timezone(UTC)
now_time datetime.datetime.now()
utc_time now_time.astimezone(tzutc)
print(now_time,utc_time) 2019-05-10 19:02:53.499513 2019-05-10 11:02:53.49951300:00
对于有采用了夏时制的要使用时区对象的normzlize方法来处理如下所示 import datetime
import pytz
utc pytz.timezone(UTC)
now_time datetime.datetime.now()
utc_time utc.normalize(now_time.astimezone(tzutc))
print(now_time,utc_time) 2019-05-10 19:08:25.286690 2019-05-10 11:08:25.28669000:00
·LMT问题
LMT这是Local Mean Time的缩写网上查一查意思是本地平均时。而且时间是8:06说明与UTC的时差不是8个小时整。下面有一个问题是当我们用pytz.timezone(Asia/Shanghai) 生成的时区是LMT而非标准的CST就是Central Standard Time的意思。那么这会造成什么后果呢下面来展示下 DstTzInfo Asia/Shanghai LMT8:06:00 STD
d datetime.datetime(2019,5,10,19,12,30,tzinfotz)
d
datetime.datetime(2019, 5, 10, 19, 12, 30, tzinfoDstTzInfo Asia/Shanghai LMT8:06:00 STD)
d d.astimezone(utc)
d
datetime.datetime(2019, 5, 10, 11, 6, 30, tzinfoUTC)
d.astimezone(tz)
datetime.datetime(2019, 5, 10, 19, 6, 30, tzinfoDstTzInfo Asia/Shanghai CST8:00:00 STD) 由上述可以发现刚开始由datetime.datetime()生成的时间是LMT接下来我将其转换为UTC时区的时间最后又转回来我们可以发现现在的时间又变成了CST标准。而这两个标准就直接导致其相差了6分钟。
下面我们可以用时区对象的localize方法将LMT准换为CST使其统一。 datetime.datetime(2019,5,10,20,30,32,tzinfotz)
datetime.datetime(2019, 5, 10, 20, 30, 32, tzinfoDstTzInfo Asia/Shanghai LMT8:06:00 STD)
tz.localize(datetime.datetime(2019,5,10,20,30,32))
datetime.datetime(2019, 5, 10, 20, 30, 32, tzinfoDstTzInfo Asia/Shanghai CST8:00:00 STD) 所以我的建议是生成带时区的时间时一定要使用timezone.localize()来生成。不要在时间对象的构造函数中传入tzinfo的方式来实现。