我的任务是验证字符串是否是有效的日期和时间。
" 2013-01-01W23:01:01"
日期和时间用符号' W'分隔开来。或白色空间。
如何获得字符串的第一部分 - " 2013-01-01"并将其传递给功能valid_date(value)
和第二部分' 23:01:01'到其他函数valid_time(value)
我试过了:
def is_datetime(value):
if(value.find[' '] >= 0):
return is_date(value[:value.find[' '] - 1]) and is_time(value[value.find[' '] + 1:])\
但显然我不被允许这样做?
答案 0 :(得分:3)
使用str.partition()
快速获取第一部分:
value.partition('W')[0]
您也可以使用str.split()
,对于Python版本< 2.5。将拆分限制为第一个W
:
value.split('W', 1)[0]
即使'W'
中没有value
字符,这两种技术都会产生结果。
演示:
>>> value = "2013-01-01W23:01:01"
>>> value.partition('W')[0]
'2013-01-01'
>>> value.split('W', 1)[0]
'2013-01-01'
答案 1 :(得分:1)
你可以试试这个,
>>> a="2013-01-01W23:01:01"
>>> a.split('W')
['2013-01-01', '23:01:01']
然后将a.split('W')[0]
和a.split('W')[1]
发送到验证功能。
答案 2 :(得分:1)
如果您不确定它是否是有效的日期或时间,您应该使用正则表达式来验证字符串,然后您甚至不需要致电is_time
和is_date
。
import re
pattern = re.compile("^(\d{4}-\d{2}-\d{2})[W ](\d{2}:\d{2}:\d{2})$")
# ...
value = "2013-01-01W23:01:01"
match = pattern.findall(value)
if match:
pass #is valid
这将测试看起来是否像日期和时间一样。
您当然可以使用更高级的正则表达式。
^(\d{4}-(11|12|0\d)-(3[10]|[12]\d))[W ]((2[0-3]|[01]\d):[0-5]\d:[0-5]\d)$
这个测试有效的日期和时间值(因此它不再匹配27:99:01),但仍然匹配无效日期,如2014-02-31。如果要排除这些情况,可以将匹配的相关部分作为match
变量的项目进行访问,并测试一个月的天数和闰年等内容。
答案 3 :(得分:1)
如果你需要做的就是检查你指定的格式的字符串是否是有效的日期时间,不需要拆分它并将值传递给一些手工制作的函数,只需使用:
from datetime import datetime
try:
valid_datetime = datetime.strptime('2013-01-01W23:01:01', '%Y-%m-%dW%H:%M:%S')
print 'this datetime is valid'
except ValueError:
print 'this datetime is invalid'