日期时间与字符串比较?

时间:2016-04-15 08:47:30

标签: python datetime

datetime格式strftime('%b %d, %Y %I:%M %p')给出字符串 例如:'Apr 17, 2016 02:00 AM'

有没有办法检查这段时间是否已经过去? 比如可能比较

datetime.datetime.now().strftime('%b %d, %Y %I:%M %p')

以某种方式对字符串'Apr 17, 2016 02:00 AM'

2 个答案:

答案 0 :(得分:7)

将字符串解析为datetime.datetime个实例,然后与datetime.now()进行比较:

from datetime import datetime

dt = datetime.strptime('Apr 17, 2016 02:00 AM', '%b %d, %Y %I:%M %p')
if dt < datetime.now():
    print('{} alread past'.format(dt))

您可能希望将其作为一项功能:

def is_past(dt_string):
    return datetime.strptime(dt_string, '%b %d, %Y %I:%M %p') < datetime.now()

然后像这样称呼它:

>>> is_past('Apr 17, 2016 02:00 AM')
False
>>> is_past('Apr 01, 2016 02:00 AM')
True

答案 1 :(得分:5)

不,字符串比较在这里不起作用;这些值不是根据完整日期排序,而是根据月份的月份和日期,由于日期编号不是零填充,因此该月份的前10天会逐渐分散。如果首先列出年份,然后是零填充数字月份,日期,小时(使用24小时制)和分钟,然后您可以仅将其作为字符串,因为这样的词典排序恰好与日期和时间的排序方式相匹配。

而是使用datetime.datetime.strptime() class method

将字符串解析为datetime对象
dt = datetime.datetime.strptime(string, '%b %d, %Y %I:%M %p')
if dt < datetime.datetime.now():
    # in the past.

演示:

>>> import datetime
>>> string = 'Apr 17, 2016 02:00 AM'
>>> dt = datetime.datetime.strptime(string, '%b %d, %Y %I:%M %p')
>>> dt
datetime.datetime(2016, 4, 17, 2, 0)
>>> dt < datetime.datetime.now()
False

如果您使用ISO8601 combined date-time format格式化日期,那么您的格式只能按字符串排序:

>>> datetime.datetime.now().isoformat()
'2016-04-15T09:55:09.907130'