【问题标题】:Comparing date strings in python比较python中的日期字符串
【发布时间】:2015-09-29 18:28:30
【问题描述】:
>> a ='2009-05-10'
>>> b ='2009-06-10'
>>> a > b
False
>>> a < b
True
>>> type(a)
<class 'str'>
>>> c = '2009-06-09'
>>> b < c
False
>>> b > c
True
>>> c ='2008-07'
>>> b > c
True
>>> a > c
True

我尝试在不使用库的情况下比较 python3 中的日期,它似乎工作正常。 这是真实的情况吗? python真的理解这些字符串是日期并根据日期格式比较它们还是幕后发生的其他事情?

【问题讨论】:

  • 如果你选择这样一个合理的日期格式,字符串的标准字典排序就像它知道它们是日期一样工作;但它没有
  • 如果 Python 只是简单地分析你的字符串内容来弄清楚它们代表什么,为什么它会有一个内置的 datetime 模块?
  • 是的。事情现在很清楚了。谢谢。
  • 这就是为什么ISO 8601 拥有YYYYMMDD 并让lexicographical sorting 处理其余的事情。日期未被解析或验证。
  • 是的,这个 ISO‑8601 (YYYY‑MM‑DD) developers.facebook.com/docs/marketing-api/dynamic-product-ads/…

标签: python python-3.x date datetime


【解决方案1】:

不,这种行为背后没有空间因素。事实上,Python 会按字典顺序比较字符串,在这种情况下它可以工作,但这不是正确的方法,因为它也可以接受错误的日期!

这是一个反例

>>> a ='2009-33-10'
>>> b ='2009-11-1'
>>> a>b
True

作为处理日期的正确方法,您应该使用datetime 模块,它有很多用于处理日期对象的工具。

您可以使用datetime.datetime.strptime 将您的字符串转换为日期对象,然后您可以使用基本的算术运算来比较您的日期对象,因为它们已经被此模块支持。

【讨论】:

  • @Kasramvd 你的解释没有问题。但是,当日期时间字符串被统一格式化(因此您的示例不适用)并且是从日期时间对象直接格式化的情况下,那么直接日期时间字符串比较实际上是 Python3 的一个不错的好处!
  • @Devy 确实,在这种情况下你可以。但是,基本上你最好不要这样做(因为通常不能保证总是收到一致的格式),除非它可以给你带来显着的性能变化。
猜你喜欢
  • 2012-10-19
  • 2013-12-20
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
相关资源
最近更新 更多