日期时间与字符串比较?

A. *_*her 2 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')
Run Code Online (Sandbox Code Playgroud)

不知何故到字符串 'Apr 17, 2016 02:00 AM'

mha*_*wke 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))
Run Code Online (Sandbox Code Playgroud)

你可能想要这个功能:

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

然后像这样调用它:

>>> is_past('Apr 17, 2016 02:00 AM')
False
>>> is_past('Apr 01, 2016 02:00 AM')
True
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

不,字符串比较在这里不起作用; 这些值不是根据完整日期排序,而是根据月份的月份和日期,由于日期编号不是零填充,因此该月份的前10天会逐渐分散.如果今年首次上市,随后是零填充数字月,日,小时(采用24小时制)和分钟,然后你可以做它作为唯一的字符串,因为那样的话辞书排序正好匹配的方式,日期时间会被分类.

而是datetime使用datetime.datetime.strptime()类方法将字符串解析为对象:

dt = datetime.datetime.strptime(string, '%b %d, %Y %I:%M %p')
if dt < datetime.datetime.now():
    # in the past.
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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
Run Code Online (Sandbox Code Playgroud)

如果您使用ISO8601组合日期时间格式格式化日期,那么您将拥有一种只能按字符串排序的格式:

>>> datetime.datetime.now().isoformat()
'2016-04-15T09:55:09.907130'
Run Code Online (Sandbox Code Playgroud)