使用Python比较不同格式的日期和时间
我有一些格式如下的行在一个文件里:
总结;会议;描述;无;开始日期;20100629T110000;结束日期;20100629T120000;时间;20100805T084547Z
我需要创建一个函数,这个函数有两个输入:时间和日期,格式分别是时间:HH:MM 和日期:mmddyyyy(这两个都是字符串)。现在这个函数需要读取这一行,看看输入的日期和时间是否在开始日期(20100629T110000)和结束日期(20100629T120000)之间。因为输入的日期和时间格式和行中的格式不一样,我该怎么处理呢?
3 个回答
1
使用 datetime
模块里的 datetime
类。下面是一个可以满足你需求的函数,不过你可能需要根据具体情况调整一些边界条件:
from datetime import datetime
def f(row, datestr, timestr):
tmp = row.split(";")
start = datetime.strptime(tmp[5], "%Y%m%dT%H%M%S")
end = datetime.strptime(tmp[7], "%Y%m%dT%H%M%S")
mytimestamp = datetime.strptime(datestr+timestr, "%d%m%Y%H:%M")
if (start < mytimestamp and mytimestamp < end):
print "inside"
else:
print "not inside"
>>> f("Summary;meeting;Description;None;DateStart;20100629T110000;DateEnd;20100629T120000;Time;20100805T084547Z", "29062010", "11:00")
not inside
>>> f("Summary;meeting;Description;None;DateStart;20100629T110000;DateEnd;20100629T120000;Time;20100805T084547Z", "29062010", "11:30")
inside
1
要处理日期和时间,可以使用Python的datetime
模块。这个模块里的datetime
类有一个方法,可以从字符串中读取日期和时间,这个方法叫做strptime
。所以你可以这样做:
# read the file, so that:
strStart = "20100629T110000"
strEnd = "20100629T120000"
imTime = "HH:MM"
inDate = "mmddyyyy"
import datetime
dateStart = datetime.datetime.strptime( strStart, "%Y%m%dT%H%M%S" )
dateEnd = datetime.datetime.strptime( strEnd, "%Y%m%dT%H%M%S" )
dateIn = datetime.datetime.strptime( inDate + inTime, "%m%d%Y%H:%M" )
assert dateStart < dateIn < dateEnd
注意,你可以使用csv
模块来读取文件。
4
你可以使用 strptime
把一个字符串转换成 datetime
对象,具体可以参考这个链接。
>>> datetime.datetime.strptime('20100629T110000', '%Y%m%dT%H%M%S')
datetime.datetime(2010, 6, 29, 11, 0)
>>> datetime.datetime.strptime('23:45 06192005', '%H:%M %m%d%Y')
datetime.datetime(2005, 6, 19, 23, 45)
然后你就可以用比较符号(比如 <
、<=
等)来比较这两个日期时间。