Сравнение даты и времени в разных форматах с использованием Python - PullRequest
1 голос
/ 11 августа 2010

У меня есть строки следующего формата в файле.

Резюме; собрание; описание; None; DateStart; 20100629T110000; DateEnd; 20100629T120000; Время; 20100805T084547Z

Мне нужно создать функцию, которая имеет два входа: время и дату в следующих форматах. Время: ЧЧ: ММ и дата в виде mmddyyyy. (Это строки). Теперь функции необходимо прочитать эту строку и посмотреть, находятся ли введенные дата и время между DateStart (20100629T11000) и DateEnd (20100629T120000). Как мне справиться с этим, поскольку формат даты и времени на входе и в строке представлены в двух форматах?

Ответы [ 3 ]

3 голосов
/ 11 августа 2010

Вы можете разобрать строку в datetime с помощью 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 голос
/ 11 августа 2010

Используйте класс 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 голос
/ 11 августа 2010

Для обработки даты и времени используйте модуль 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

NB. Вы можете использовать csv для чтения файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...