pytz格式化北京时间多出6分钟问题的解决方法
作者:栖迟于一丘 发布时间:2021-07-31 14:10:21
标签:pytz,格式化,时间
起步
在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
我更喜欢这种方式。
来源:http://www.hongweipeng.com/index.php/archives/1803/
0
投稿
猜你喜欢
- 目录简介开发工具实现代码爬取效果Github地址:简介使用Python Tkinter开发一个爬取B站直播弹幕的工具,启动后在弹窗中输入房间
- Selenium特点开源,免费多浏览器支持:firefox、chrome、IE多平台支持:linux 、windows、MAC多语言支持:j
- 前言突然想起来之前讲SQL注入时忘记讲一下这个宽字节注入了,因为这个知识点还是挺重要的,所以本文就带大家了解一下宽字节注入的原理以及应用方法
- 最近用vuepress建了个博客,音乐的背景图片需要网络地址。还有博客自动复用的摘要图片也需地址开始用的阿里云的免费对象存储oss,但又是登
- crtrl.py监控Apache服务器进程的Python 脚本!/usr/bin/env Python import os, sys, ti
- 本文实例讲述了Python Django框架单元测试之文件上传测试。分享给大家供大家参考,具体如下:Submitting files is
- demo中的p中的script改大或改小看看。。。移动到top的时间始终是一定的,你也可以设置一个阀值,在页面高度到达这个阀值之前,移动的总
- #BEGIN CONFIG INFO#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大#TYPE:
- 目前,Python 科学栈中的所有主要项目都同时支持 Python 3.x 和 Python 2.7,不过,这种情况很快即将结束。去年 11
- 这篇论坛文章(赛迪网技术社区)主要介绍了配置一个高可用性的MySQL服务器负载均衡群集的具体过程,详细内容请参考下文:本文将告诉你如何配置一
- XML文档因为其固有的描述性特性而趋向于变得很罗嗦。其结果是文档会由于被描述的数据增多而变得很长,而这种很大的文档会在需要同其他实体进行交换
- 1.配置环境安装python3安装python3-pip通过pip安装Django**如果需要使用Jinja模板,需要通过pip安装djan
- 本文介绍使用aspjpeg组件实现图片的半透明描边的效果,描边效果演示:参数说明'big 原图路径(相对)'small 生成
- 本文首先介绍在python3中print函数的应用,然后对比在pyhton2中的应用。(本文作者所用版本为3.6.0)首先我们通过help(
- 这个类可以用来搜索在给定的文本目录中的文件。 它可以给定目录遍历递归查找某些文件扩展名的文件。 并打开找到的文件,并检查他们是否包含搜索词语
- 一、闭包闭包相当于函数中,嵌套另一个函数,并返回。代码如下:def func(name): # 定义外层函数 def inner
- 这里首先给出来我很早之前写的一篇博客,Python实现去除列表中重复元素的方法小结【4种方法】,感兴趣的话可以去看看,今天是在实践过程中又积
- 简单的小练习,实现将一个指定列表中的数值进行转化,对于其中的非负数不作处理,对于负数需要转化为制定的数值,很简单就不多说了,下面是具体的实现
- 文档格式的排错 我妈妈_的清单中有数十条菜谱,甚至数百条。如果产生一个致命错误,排错将非常困难 - 你将一行一行地寻找丢失的标记符。如果使用
- 权重初始化对于训练神经网络至关重要,好的初始化权重可以有效的避免梯度消失等问题的发生。在pytorch的使用过程中有几种权重初始化的方法供大