【问题标题】:Parse rfc3339 date strings in Python? [duplicate]在 Python 中解析 rfc3339 日期字符串? [复制]
【发布时间】:2014-06-10 05:34:35
【问题描述】:

我有一个数据集,其中所有日期的格式如下:

2012-10-09T19:00:55Z

我希望能够对它们使用.weekday 之类的方法。如何在 Python 中将它们转换为正确的格式?

【问题讨论】:

标签: python date datetime-parsing rfc3339


【解决方案1】:

您可以使用dateutil.parser.parse(与python -m pip install python-dateutil一起安装)将字符串解析为日期时间对象。

dateutil.parser.parse 将尝试猜测您的字符串的格式,如果您事先知道确切的格式,那么您可以使用您提供格式字符串的datetime.strptime(请参阅 Brent Washburne 的回答)。

from dateutil.parser import parse

a = "2012-10-09T19:00:55Z"

b = parse(a)

print(b.weekday())
# 1 (equal to a Tuesday)

【讨论】:

  • 我不知道为什么我没有听说过dateutil.parser。这些是使 Python 变得很棒的小东西。 from somemodule import problemsolver && problemsolver.solvemyspecificproblem()
  • @kraxor 可能是因为它实际上不是 Python 的一部分,而是第三部分库。 git clone http://example.com/module/problemsolver problemsolver && cd problemsolver && python problemsolver.py myspecificproblem
  • @Ffisegydd 我的错误,我做了'pip install dateutil'而不是在前面加上python-。
  • 您需要表明我们是第三方库
  • @kraxor Python 很棒,因为它接受的关于如何解析日期的答案需要安装第 3 方库?这似乎不太棒。
【解决方案2】:

你应该看看moment,它是优秀的js库momentjs的python端口。

它的一个优点是支持ISO 8601 字符串格式,以及通用的“% 格式”:

import moment
time_string='2012-10-09T19:00:55Z'

m = moment.date(time_string, '%Y-%m-%dT%H:%M:%SZ')
print m.format('YYYY-M-D H:M')
print m.weekday

结果:

2012-10-09 19:10
2

【讨论】:

    【解决方案3】:

    这里已经回答了这个问题:How do I translate a ISO 8601 datetime string into a Python datetime object?

    d = datetime.datetime.strptime( "2012-10-09T19:00:55Z", "%Y-%m-%dT%H:%M:%SZ" )
    d.weekday()
    

    【讨论】:

    • 这是次优的,因为它要求调用者为相当广泛的 ISO 8601 变体提供格式字符串(除非在省略秒数的情况下喜欢 ValueError,例如)。另一方面,dateutil 解析器可以更好地处理这些问题。
    • @AlexNorth-Keys:这不是最理想的吗? OP 声明“我有一个数据集,其中所有日期都具有以下格式”并且没有提及任何变体。这个答案实际上是最佳的,因为它不需要任何外部模块,它使用内置的 datetime 模块。通过使用确切的格式字符串(而不是让 dateutil 每次都猜测格式),代码性能是最佳的。
    • 我是从维护的角度考虑的(哎呀)——但你是对的,strptime 方法更快,运行时间大约是 dateutil.parser 方法的 1/6。
    • "%Y-%m-%dT%H:%M:%SZ" 产生一个“天真的”日期时间。生成“感知”日期时间(即感知时区):"%Y-%m-%dT%H:%M:%S%z"
    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 2011-05-28
    • 1970-01-01
    相关资源
    最近更新 更多