使用Python比较不同格式的日期和时间

时间:2010-08-11 10:38:56

标签: python date time

我在文件中有以下格式的行。

概要;会议;描述;无; DateStart; 20100629T110000; DateEnd; 20100629T120000;时间; 20100805T084547Z

我需要创建一个具有两个输入的函数:时间和日期,格式如下:时间:HH:MM,日期为mmddyyyy。 (这些是字符串)。现在该函数需要读取此行并查看输入日期和时间是否在DateStart(20100629T11000)和DateEnd(20100629T120000)之间。我如何处理这个问题,因为输入和行中的日期和时间格式有两种格式?

3 个答案:

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