以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'
答案 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'