编程语言
首页 > 编程语言> > Python中奇怪的日期解析结果

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