pytz库时区的坑(转)
add by zhj: 推荐使用标准库中的dateutil代替pytz
原文:https://www.hongweipeng.com/index.php/archives/1803/
起步
在django框架中,用的是 pytz 库处理时区问题,所以我也尝试用这个库来处理。但发现了一个奇怪的问题:
1
2
3
4
5
|
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 里保存是本地时间。
1
2
3
|
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 提供了 localize() 方法来纠正这个问题,但传入的得是不带时区的日期对象:
1
2
3
4
5
6
7
8
|
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小时。
1
2
3
4
|
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 工具。官方内置,值得信赖。它支持在创建日期对象的时候进行设置,更为方便:
1
2
3
4
5
6
7
8
|
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库时区的坑(转)的更多相关文章
- xamarin绑定原生库的一些坑
最近一个项目涉及到较多的第三方库的绑定技术,中间遇到了几个坑,记录下来与大家分享 绑定Jar库 monoandroid对原生库的调用都通过Android.Runtime.JNIEnv进行调入(http ...
- python pytz 结合时区的日期操作
有一个安排在2012 年12 月21 日早上9:30 的电话会议,地点在芝加哥.而朋友在印度的班加罗尔,那么他应该在当地时间几点参加这个会议呢? 对几乎所有涉及到时区的问题,你都应该使用pytz 模块 ...
- 人工智能(AI)库TensorFlow 踩坑日记之二
上次 踩坑日志之一 遗留的问题终于解决了,所以作者(也就是我)终于有脸出来写第二篇了. 首先还是贴上 卷积算法的示例代码地址 :https://github.com/tensorflow/models ...
- 人工智能(AI)库TensorFlow 踩坑日记之一
上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是g ...
- golang 常用的日期方法和时区的坑
import( "time" ) 1.获取当前时间 time.Now(),返回类型:time结构. 2.字符串转为日期 t, _ := time.ParseInLocation(& ...
- GCC链接库的一个坑:动态库存在却提示未定义动态库的函数
背景 在GCC中已经指定链接库,然而编译时却提示动态库函数未定义! 测试出现的错误提示如下: [GMPY@13:48 tmp]$gcc -o test -L. -lmylib test.c /tmp/ ...
- C++11 标准库也有坑(time-chrono)
恰巧今天调试程序遇到时间戳问题, 于是又搜了搜关于取时间戳,以及时间戳转字符串的问题, 因为 time() 只能取到秒(win和linux) 想试试看能不能找到 至少可以取到毫秒的, 于是, 就找 ...
- mysql 忽略库同步的坑
使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错. 如在Master(主)服务器上设置 replicate_do_db=test(my.conf ...
- cocoapods集成三方库遇到的坑
什么都不想说直接上图 这是最近在管理三方库时遇到头疼的问题,刚开始一直怀疑是cocoapods或者ruby的版本问题但是升级到最新版还是同样的错误,后来又怀疑是资源文件的问题但是在同一时间不同地点集成 ...
随机推荐
- 2018-2-13-win10-uwp-切换主题
原文:2018-2-13-win10-uwp-切换主题 title author date CreateTime categories win10 uwp 切换主题 lindexi 2018-2-13 ...
- ASP.NET Core框架深度学习(三) Server对象
8.Server 第五个对象 服务器在管道中的职责非常明确,当我们启动应用宿主的WebHost的时候,服务它被自动启动.启动后的服务器会绑定到指定的端口进行请求监听,一旦有请求抵达,服务器会根据该 ...
- 使用Node.js简单创建一个服务器
首先,我们要了解Node.js不是一种语言,它只是一个除了浏览器之外的,可以运行js的环境. 其次,Node能做些什么 ? web服务器. 命令行工具. 网络爬虫. 桌面应用程序开发等 3.接下 ...
- FCC---Create Movement Using CSS Animation---设计一个盒子上下左右移动,结合animation, @keyframe, position (上下左右的offset)
When elements have a specified position, such as fixed or relative, the CSS offset properties right, ...
- opencv::证件照背景替换
证件照背景替换 K-Means 背景融合 – 高斯模糊 遮罩层生成 #include <opencv2/opencv.hpp> #include <iostream> usin ...
- mssql sqlserver sql脚本自动遍历重复生成指定表记录
摘要: 今天接到老板的需求,需根据一张表中列值,自动重复表中的数据行,然后显示给用户 实验环境:sqlserver 2008 R2 转自:http://www.maomao365.com/?p=841 ...
- C/S与B/S架构
目录 软件开发架构 C/S架构 数据放在服务端和客户端的利弊: B/S架构 软件开发架构 开发软件,必须要开发一套 客户端 和 服务端 服务端与客户端的作用 服务端:24小时不间断提供服务 客户端:享 ...
- Web服务器—Apache
Apache配置文件:httpd.conf文件 # 指定Apache的安装路径,此选项参数值在安装Apache时系统会自动把Apache的路径写入. ServerRoot "/www/ser ...
- 十一,专著研读(CART算法)
十一,专著研读(CART算法) CART称为分类回归树,既能用于分类也能用于回归.使用二元切分方法处理连续型变量,给定特定值,如果特征值大于给定值就走左子树,否则走右子树. CART算法步骤 决策树生 ...
- class 命名规范(三)
抄自:https://www.jianshu.com/p/4945d9cf14e5 一.常见class关键词 布局类:header, footer, container, main, content, ...