pytz模块常用于时区的转换,常常配合datetime一起使用。我们知道datetime除了data方法生成的时间是没有时区概念,其他如time、datetime等都是有时区概念,即指定了tzinfo信息。
成都创新互联是专业的石台网站建设公司,石台接单;提供成都做网站、成都网站设计、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行石台网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
>>> import datetime >>> datetime.datetime.now(tz) datetime.datetime(2009, 2, 21, 15, 12, 33, 906000, tzinfo=) >>> datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo=tz) datetime.datetime(2009, 2, 21, 15, 12, 33, tzinfo= ) >>> datetime.date(2009, 2, 21, tzinfo=tz) Traceback (most recent call last): File " ", line 1, in TypeError: 'tzinfo' is an invalid keyword argument for this function >>> datetime.time(15, 12, 33, tzinfo=tz) datetime.time(15, 12, 33, tzinfo= )
时区转换
·pytz.country_timezones(‘国家代码’):此方法可以拿到某个国家的时区名列表。
相关推荐:《python教程》
>>>(pytz.country_timezones('cn') ['Asia/Shanghai', 'Asia/Urumqi']
·pytz.timezone(‘时区名’):此方法能获取一个tzinfo对象,该对象可在datetime生成时间中以参数的形式放入,即可生成对应时区的时间。
>>>utc = pytz.timezone('UTC') >>>datetime.datetime.now(tz=utc) 2019-05-10 10:53:46.000929+00:00
实际上,现在时间为18:53:46
·查看有哪些时区
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(tz=utc) print(now_time,utc_time)
2019-05-10 19:02:53.499513 2019-05-10 11:02:53.499513+00:00
对于有采用了夏时制的要使用时区对象的normzlize方法来处理,如下所示:
import datetime import pytz utc = pytz.timezone('UTC') now_time = datetime.datetime.now() utc_time = utc.normalize(now_time.astimezone(tz=utc)) print(now_time,utc_time)
2019-05-10 19:08:25.286690 2019-05-10 11:08:25.286690+00:00
·LMT问题
LMT,这是Local Mean Time的缩写,网上查一查意思是本地平均时。而且时间是+8:06,说明与UTC的时差不是8个小时整。下面有一个问题是,当我们用pytz.timezone('Asia/Shanghai') 生成的时区是LMT,而非标准的CST(就是Central Standard Time的意思)。那么这会造成什么后果呢?下面来展示下:
>>>d = datetime.datetime(2019,5,10,19,12,30,tzinfo=tz) >>>d datetime.datetime(2019, 5, 10, 19, 12, 30, tzinfo= ) >>>d = d.astimezone(utc) >>>d datetime.datetime(2019, 5, 10, 11, 6, 30, tzinfo= ) >>>d.astimezone(tz) datetime.datetime(2019, 5, 10, 19, 6, 30, tzinfo= )
由上述可以发现,刚开始由datetime.datetime()生成的时间是LMT,接下来我将其转换为UTC时区的时间,最后又转回来,我们可以发现,现在的时间又变成了CST标准。而这两个标准,就直接导致其相差了6分钟。
下面我们可以用时区对象的localize方法,将LMT准换为CST,使其统一。
>>>datetime.datetime(2019,5,10,20,30,32,tzinfo=tz) datetime.datetime(2019, 5, 10, 20, 30, 32, tzinfo=) >>>tz.localize(datetime.datetime(2019,5,10,20,30,32)) datetime.datetime(2019, 5, 10, 20, 30, 32, tzinfo= )
所以我的建议是生成带时区的时间时,一定要使用timezone.localize()来生成。不要在时间对象的构造函数中传入tzinfo的方式来实现。
名称栏目:创新互联Python教程:pythonpytz是什么
本文来源:http://www.mswzjz.cn/qtweb/news3/244103.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能