【问题标题】:Comparing two date strings in Python在 Python 中比较两个日期字符串
【发布时间】:2013-12-20 09:04:23
【问题描述】:

假设我有一个字符串:“10/12/13”和“10/15/13”,如何将它们转换为日期对象以便比较日期?例如查看哪个日期在之前或之后。

【问题讨论】:

  • 你怎么会有约会10/15/13
  • @aIKid 2013 年 10 月 15 日?
  • 如果这就是您需要做的所有事情并且这些日期始终采用这种格式,那么您自己比较它们会不会更容易?

标签: python date datetime


【解决方案1】:

如果您喜欢使用dateutil 及其解析器:

from dateutil.parser import parse

date1 = parse('10/12/13')
date2 = parse('10/15/13')

print date1 - date2
print date2 > date2

【讨论】:

  • pip install python-dateutil
【解决方案2】:

这是使用datetime.datetime.strptime 的一种解决方案:

>>> date1 = datetime.datetime.strptime('10/12/13', '%m/%d/%y')
>>> date2 = datetime.datetime.strptime('10/15/13', '%m/%d/%y')
>>> date1 < date2
True
>>> date1 > date2
False

【讨论】:

  • 由于某种原因 %y(小写 y)给了我“未转换的数据仍然存在”错误,而 %Y(大写 Y)有效。为什么?
  • %y 适用于没有世纪的年份 - 作为零填充数字(01、02、03.. 等等)。而%Y与带有世纪(十进制)数字的年份一起工作:(1999、1979)。你的数据是什么?
【解决方案3】:

使用datetime.datetime.strptime

from datetime import datetime

a = datetime.strptime('10/12/13', '%m/%d/%y')
b = datetime.strptime('10/15/13', '%m/%d/%y')

print 'a' if a > b else 'b' if b > a else 'tie'

【讨论】:

    【解决方案4】:

    使用datetime.datetime.strptime:

    >>> from datetime import datetime as dt
    >>> a = dt.strptime("10/12/13", "%m/%d/%y")
    >>> b = dt.strptime("10/15/13", "%m/%d/%y")
    >>> a > b
    False
    >>> a < b
    True
    >>>
    

    【讨论】:

    • 由于某种原因 %y(小写 y)给了我“未转换的数据仍然存在”错误,而 %Y(大写 Y)有效。为什么?
    • @Gnuey - 日期时间格式字符串区分大小写。 %Y%y 不同。 %Y 告诉 Python 匹配一个 4 位数的年份,例如 2014%y 但是匹配 2 位数年份,例如 14 对应年份 2014。您必须尝试将 4 位数年份与 2 位数 %y 说明符匹配。以下是可用格式说明符的参考:docs.python.org/2/library/…
    • 啊,我明白了。没有抓住“!4”vs“2014”的那个非常有价值的细节。感谢您的回答,非常感谢您的参考!
    【解决方案5】:
    import datetime
    
    d1="10/12/13"
    d2="10/15/13"
    date = d1.split('/')
    d1=datetime.datetime(int(date[2]),int(date[1]),int(date[0])) 
    date = d2.split('/')
    d2=datetime.datetime(int(date[2]),int(date[1]),int(date[0]))
    if d1 > d2 :
        ## Code
    today = datetime.datetime.today()
    if d1 > today :
        ## code
    

    【讨论】:

    • 请在您的答案中添加更多详细信息,也许简要说明代码的作用会有所帮助。
    【解决方案6】:

    最简单的方法是使用 Pandas

    import pandas as pd
    d1=pd.to_datetime("10/12/13")
    d2=pd.to_datetime("10/12/15")
    
    d1>d2
    
    >>False
    

    【讨论】:

    • 虽然这是一种有效的方法,但它并不是最简单的
    【解决方案7】:

    我知道这篇文章已有 7 年的历史,但我想说的是,您可以比较两个日期字符串而无需将它们转换为日期

    >>> "10/12/13" > "10/15/13"
    False
    >>> "10/12/13" < "10/15/13"
    True
    >>> "10/12/13" == "10/15/13"
    False
    

    如果这种方法有什么问题,我希望有人告诉我。

    【讨论】:

    • 请参阅此答案,了解为什么这是比较日期字符串的不好方法。 stackoverflow.com/a/31350422/4589310
    • 反例:'10/15/13' &gt; '10/12/14'October 15, 2013October 12, 2014 之前。
    猜你喜欢
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2013-06-24
    • 2014-04-21
    • 2013-01-24
    相关资源
    最近更新 更多