pytz库时区的坑(转)
add by zhj: 推荐使用标准库中的dateutil代替pytz
原文:https://www.hongweipeng.com/index.php/archives/1803/
起步
在django框架中,用的是 pytz 库处理时区问题,所以我也尝试用这个库来处理。但发现了一个奇怪的问题:
|
1
2
3
4
5
|
import datetimeimport pytzdt = 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:00print(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:00print(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的版本问题但是升级到最新版还是同样的错误,后来又怀疑是资源文件的问题但是在同一时间不同地点集成 ...
随机推荐
- 转 googlenet论文解读
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u014061630/article/det ...
- python免密远程执行shell
使用paramiko库:https://github.com/paramiko/paramiko 简单封装SSH类 import paramiko class SSH: def __init__(se ...
- HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process
vs2019 win10 情况:报错 HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process 微软官方解 ...
- Python中执行系统命令的四种方法
一.os.system方法 在子终端运行系统命令,可以获取命令执行后的返回信息以及执行返回的状态.执行后返回两行结果,第一行是结果, 第二行是执行状态信息,如果命令成功执行,这条语句返回0,否则返回1 ...
- async/await简单使用
function process(i) { var p = new Promise(function(resolve,reject){ setTimeout(function(){ console.l ...
- IOS疯狂基础之模态显示PresentModalViewController(转)
转自:http://blog.csdn.net/wudizhukk/article/details/8553554 -(void)buttonDown:(id)sender{ ViewTwo *two ...
- 控制台程序(C#)不弹出登录窗口连接到Dynamics CRM Online的Web API
微软动态CRM专家罗勇 ,回复331或者20190505可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 我之前的文章 控制台程序(C#)不弹出认证窗口连接到Dynami ...
- BayaiM__MySQL 常用函数
BayaiM__MySQL 常用函数 原创 作者:bayaim 时间:2016-06-16 09:11:13 122 0删除编辑 MySQL 常用函数 阅读(883430) | 评论(44543) ...
- 3.Java基础_Java变量
/* 变量定义格式 数据类型 变量名=变量值 基本数据类型: byte,short,int,long,float,double,char,boolean 变量的使用: 取值格式: 变量名 修改值格式: ...
- 1. git 基础
参考文档: https://www.liaoxuefeng.com/wiki/896043488029600 https://git-scm.com/docs/git-fsck 一.介绍 Linus一 ...