gpt4 book ai didi

python - Python 中奇怪的日期解析结果

转载 作者:行者123 更新时间:2023-11-28 16:48:50 27 4
gpt4 key购买 nike

我正在使用 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 小时才能获得 GMT。这就是为什么我需要在下午晚些时候给我的 parent (在英国)打电话,否则他们就在床上。换句话说:“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 表单作为代码文档工作,但并不像您期望的那样。 该行不等同于其他两行。

我不知道为什么代码会这样工作;我只是报告我读到的内容。

最后,请注意该代码中的一般方法是逐 block 处理整个日期字符串,将不同的逻辑应用于不同的地方。没有那么多检查来确保不同地方的逻辑是一致的(所以不会因为第一行明显的矛盾而抛出错误)。就个人而言,我更喜欢使用 python 自己的日期解析例程但尝试不同格式字符串的库 - 我怀疑这会更可靠(但可能不太灵活)。

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

关于python - Python 中奇怪的日期解析结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10575919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com