开始和结束时间到日期时间的字符串
Strings with start and end time to datetime
对于一个项目,我需要解析一些日期字符串。给定一个日期,是一周中的星期一,例如:2015年2月16日。
然后,我设法提取了一个日期列表,如下所示:
['Wednesday', '11:00AM', '7:00PM']
['Friday', '10:15AM', '4:30PM']
['Sunday', '12:00AM', '5:00PM']
第一个值显然是日期,第二个值是开始时间,最后一个值是结束时间(用于事件)。
我想将其转换为实际的 python datetime
对象,但它必须与开始日期一致。
到目前为止我尝试过的是使用这个:
# Beginning of week
BoW = datetime.strptime('Feb 16, 2015', "%b %d, %Y")
# List of days
for day in days:
# Find the Day of the Week
# This outputs a number, 0 = Monday, 6 = Sunday
DoW = table.index(tr)
schedule.append({
'start' : BoW + timedelta(days=DoW),
'end' : BoW + timedelta(days=DoW)
})
如您所见,这只会成功设置日期,而不是 hour/minute。有什么方法可以轻松实现吗?
你也可以用strptime()
解析时间:
timevalue = datetime.strptime(timecomponent, '%I:%M%p').time()
%I
是 12 小时制小时值(因此介于 1 和 12 之间),%p
是 AM 或 PM 限定符。
然后您可以使用 datetime.datetime.combine()
将该时间部分与您的日期结合起来:
BoW = datetime.strptime('Feb 16, 2015', "%b %d, %Y").date()
start = datetime.strptime(start_time, '%I:%M%p').time()
end = datetime.strptime(end_time, '%I:%M%p').time()
start, end = datetime.combine(BoW, start), datetime.combine(BoW, end)
演示:
>>> from datetime import datetime, timedelta
>>> BoW = datetime.strptime('Feb 16, 2015', "%b %d, %Y").date()
>>> datetime.strptime('11:00AM', '%I:%M%p').time()
datetime.time(11, 0)
>>> datetime.combine(BoW, _)
datetime.datetime(2015, 2, 16, 11, 0)
不确定你的情况到底是什么类型,但你可以试试很酷的 NLP 时间解析库 parsedatetime
。它会让你做这样的事情:
import parsedatetime
cal = parsedatetime.Calendar()
WoY_timetuple, status = cal.parse("Feb 16, 2015")
DoW_timetuple, status = cal.parse("Wednesday", sourceTime=WoY_timetuple)
start, status = cal.parseDT("11:00AM", sourceTime=DoW_timetuple)
end, status = cal.parseDT("7:00PM", sourceTime=DoW_timetuple)
因此您可以轻松设置解析上下文,将一天中的每个时间字符串放入完整的 datetime
对象中。您需要确保仔细处理 .parse
方法返回的状态代码。如果您的输入数据在日期格式方面有一些可变性,这种方法可以节省时间,否则 Martijn 的方法可能更安全。
对于一个项目,我需要解析一些日期字符串。给定一个日期,是一周中的星期一,例如:2015年2月16日。
然后,我设法提取了一个日期列表,如下所示:
['Wednesday', '11:00AM', '7:00PM']
['Friday', '10:15AM', '4:30PM']
['Sunday', '12:00AM', '5:00PM']
第一个值显然是日期,第二个值是开始时间,最后一个值是结束时间(用于事件)。
我想将其转换为实际的 python datetime
对象,但它必须与开始日期一致。
到目前为止我尝试过的是使用这个:
# Beginning of week
BoW = datetime.strptime('Feb 16, 2015', "%b %d, %Y")
# List of days
for day in days:
# Find the Day of the Week
# This outputs a number, 0 = Monday, 6 = Sunday
DoW = table.index(tr)
schedule.append({
'start' : BoW + timedelta(days=DoW),
'end' : BoW + timedelta(days=DoW)
})
如您所见,这只会成功设置日期,而不是 hour/minute。有什么方法可以轻松实现吗?
你也可以用strptime()
解析时间:
timevalue = datetime.strptime(timecomponent, '%I:%M%p').time()
%I
是 12 小时制小时值(因此介于 1 和 12 之间),%p
是 AM 或 PM 限定符。
然后您可以使用 datetime.datetime.combine()
将该时间部分与您的日期结合起来:
BoW = datetime.strptime('Feb 16, 2015', "%b %d, %Y").date()
start = datetime.strptime(start_time, '%I:%M%p').time()
end = datetime.strptime(end_time, '%I:%M%p').time()
start, end = datetime.combine(BoW, start), datetime.combine(BoW, end)
演示:
>>> from datetime import datetime, timedelta
>>> BoW = datetime.strptime('Feb 16, 2015', "%b %d, %Y").date()
>>> datetime.strptime('11:00AM', '%I:%M%p').time()
datetime.time(11, 0)
>>> datetime.combine(BoW, _)
datetime.datetime(2015, 2, 16, 11, 0)
不确定你的情况到底是什么类型,但你可以试试很酷的 NLP 时间解析库 parsedatetime
。它会让你做这样的事情:
import parsedatetime
cal = parsedatetime.Calendar()
WoY_timetuple, status = cal.parse("Feb 16, 2015")
DoW_timetuple, status = cal.parse("Wednesday", sourceTime=WoY_timetuple)
start, status = cal.parseDT("11:00AM", sourceTime=DoW_timetuple)
end, status = cal.parseDT("7:00PM", sourceTime=DoW_timetuple)
因此您可以轻松设置解析上下文,将一天中的每个时间字符串放入完整的 datetime
对象中。您需要确保仔细处理 .parse
方法返回的状态代码。如果您的输入数据在日期格式方面有一些可变性,这种方法可以节省时间,否则 Martijn 的方法可能更安全。