给定一个字符串中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'
将字符串解析为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)
不,字符串比较在这里不起作用; 这些值不是根据完整日期排序,而是根据月份的月份和日期,由于日期编号不是零填充,因此该月份的前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)
归档时间: |
|
查看次数: |
2437 次 |
最近记录: |