起步
在django框架中,用的是 pytz 库处理时区问题,所以我也尝试用这个库来处理。但发现了一个奇怪的问题:
import datetime import pytz dt = datetime.datetime(2019,6,20, 12, tzinfo=pytz.timezone('Asia/Shanghai')) print(dt) # 2019-06-20 12:00:00+08:06
为什么多出了 6 分钟来?
原因
这是因为 pytz 里保存是本地时间。
fmt = '%Y-%m-%d %H:%M:%S %Z%z' dt = datetime.datetime(2019,6,20, 12, tzinfo=pytz.timezone('Asia/Shanghai')) print(dt.strftime(fmt)) # 2019-06-20 12:00:00 LMT+0806
LMT 即 Local Mean Time 本地时间,也就是说 'Asia/Shanghai' 这个地区比utc多了8小时零6分钟,并不是北京时间。
解决
所以 pytz 提供了 normalize() 方法来纠正这个问题,但传入的得是不带时区的日期对象:
cn_zone = pytz.timezone('Asia/Shanghai') dt = cn_zone.localize(dt = datetime.datetime(2019,6,20, 12)) print(dt) # 2019-06-20 12:00:00+08:00 print(dt.strftime(fmt)) # 2019-06-20 12:00:00 CST+0800 # 或者 dt = datetime.datetime(2019,6,20, 12) print(dt.astimezone(cn_zone)) # 2019-06-20 12:00:00 CST+0800
这里推荐的还是用 astimezone 的方式,django 也是采用这种处理方式。
时区转换
以从北京时间转纽约时间为例,已知结果它们之间应该相差12小时。
dt = datetime.datetime(2019,6,20, 12) print(dt.astimezone(tz=cn_zone)) # 2019-06-20 12:00:00+08:00 print(dt.astimezone(tz=cn_zone).astimezone(ny_zone)) # 2019-06-20 12:00:00-04:56
额外
另一个解决时区问题就是使用标准库的 dateutil 工具。官方内置,值得信赖。它支持在创建日期对象的时候进行设置,更为方便:
cn = tz.gettz('Asia/Shanghai') aware_dt = datetime.datetime(2019,6,20, 12, tzinfo=cn) print(aware_dt ) # 2019-06-20 12:00:00+08:00 # 时区转换(从北京时间转到纽约时间) ny = tz.gettz('America/New_York') print(aware_dt.astimezone(tz=ny)) # 2019-06-20 00:00:00-04:00
我更喜欢这种方式。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
pytz格式化,pytz模块方法
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。