日期时间与字符串的比较?

3

给定一个以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个回答

8

将字符串解析为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

6
不,字符串比较在这里行不通;这些值不是按照完整日期排序的,而是按照月份和日期排序,月份前10天的日期数字没有零填充,因此排列方式不规则。如果年份先列出,然后是零填充的数字月份、日期、小时(使用24小时制)和分钟,则您可以仅使用字符串进行操作,因为字典序排序恰好与日期和时间排序方式相匹配。
相反,使用datetime.datetime.strptime()类方法将字符串解析为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 组合日期时间格式格式化日期,则会得到只能按字符串排序的格式:
>>> datetime.datetime.now().isoformat()
'2016-04-15T09:55:09.907130'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接