ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python中奇怪的日期解析结果

2019-12-01 10:58:44  阅读:296  来源: 互联网

标签:python-dateutil timezone datetime python


我正在使用dateutil库来解析一些日期字符串,并得到奇怪的结果.我假设以下日期字符串都相等,并且括号中的时区缩写实际上是可选的,但是删除它会得到一个完全不同的值:

import datetime   
import dateutil.parser

parsed_d1 = dateutil.parser.parse('Sun May 13 2012 00:00:00 GMT-0400 (EDT)')   
parsed_d2 = dateutil.parser.parse('Sun May 13 2012 00:00:00 GMT-0400')   
parsed_d3 = dateutil.parser.parse('Sun May 13 2012 00:00:00-0400')   

print str(parsed_d1)   
print str(parsed_d2)   
print str(parsed_d3) 

输出:

2012-05-13 00:00:00-04:00   
2012-05-13 00:00:00+04:00   
2012-05-13 00:00:00-04:00  

谁能解释这是怎么回事?

解决方法:

EDT适用于英国西部的美国.太阳从东边升起.因此在美国之前,太阳在英国头顶.因此您需要在EDT上增加4个小时才能获得格林尼治标准时间.这就是为什么我需要在下午晚些时候给父母打电话(在英国),否则他们就在床上.换句话说:“ EDT 4是GMT”.

现在它的来源是http://bazaar.launchpad.net/~dateutil/dateutil/trunk/view/head:/dateutil/parser.py,似乎与解析GMT-0400有关的注释说

# Check for something like GMT+3, or BRST+3. Notice
# that it doesn't mean "I am 3 hours after GMT", but
# "my time +3 is GMT". If found, we reverse the
# logic so that timezone parsing code will get it
# right.

这表示GMT-0400相当于“我的时间-4是GMT”.这与上面的不一样.

另外,如果您查看代码,则在此之后处理尾随(EDT),因此具有优先权.我认为第三种情况,最后的简单-0400可以按照您的期望进行处理.

换句话说(从我看来,从扫描代码开始),GMT-0400表单正在用作代码文档,但未达到您的期望.那条线不等于其他两条.

我不知道为什么代码会这样工作;我只是报告我读到的东西.

最后,请注意,该代码中的一般方法是逐个块地遍历整个日期字符串,并将不同的逻辑应用于不同的位置.没有太多的检查来确保不同位置的逻辑是一致的(因此,对于第一行中明显的矛盾,不会引发任何错误).就个人而言,我更喜欢使用python自己的日期解析例程,但尝试使用不同格式字符串的库-我怀疑这样做会更可靠(但可能不太灵活).

更新我已经忘记了这篇文章,但是写完此回复后不久,我写了simple-date来处理时区解析.它采用的方法更像我说的我更喜欢-而不是尝试变得聪明,它在pytz数据库中搜索匹配项.

标签:python-dateutil,timezone,datetime,python
来源: https://codeday.me/bug/20191201/2080031.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有