我在文件中有以下格式的行。
概要;会议;描述;无; DateStart; 20100629T110000; DateEnd; 20100629T120000;时间; 20100805T084547Z
我需要创建一个具有两个输入的函数:时间和日期,格式如下:时间:HH:MM,日期为mmddyyyy。 (这些是字符串)。现在该函数需要读取此行并查看输入日期和时间是否在DateStart(20100629T11000)和DateEnd(20100629T120000)之间。我如何处理这个问题,因为输入和行中的日期和时间格式有两种格式?
答案 0 :(得分:3)
你可以parse a string into a datetime
with strptime
:
>>> 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)
然后你可以比较(<
,<=
等)两个日期时间。
答案 1 :(得分: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
N.B。您可以使用csv
来读取文件。
答案 2 :(得分: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