【发布时间】:2021-03-17 16:52:35
【问题描述】:
我有一个不同日期的列表。我想测试列表中的值是否为有效日期。我曾尝试这样做,但我给出的声明效果不佳。我该怎么做?
list1 = ['201222020','20-12-2020','12122020', '53122020']
valid=[]
invalid=[]
for l in list1:
try:
x = dateutil.parser.parse(str(l)) or dt.strptime(str(l),'%m%d%Y') or dt.strptime(str(l),'%d%m%Y')
valid.append(x)
except:
invalid.append(l)
print(valid)
print(invalid)
这给出了:
valid = [datetime.datetime(2020, 12, 20, 0, 0)]
invalid = ['201222020', '12122020', '53122020']
但在现实生活中,像 '201222020','12122020' 这样的日期也应该被接受,这是通过使用 or 之后的另一个语句来实现的,并且这个值 '53122020' 应该被拒绝。
在我的场景中,它如上所示。我哪里错了?如何以正确的方式对齐语句,以便列表将一个接一个地检查(first date until and then datetime('%m%d%Y'),然后三个datetime('%d%m%Y')?
实际输出:
valid = [datetime.datetime(2020, 20, 2, 0, 0), datetime.datetime(2020, 12, 20, 0, 0), datetime.datetime(2020, 12, 12, 0, 0)]
invalid = ['53122020']
【问题讨论】:
-
为什么要使用不同的库?据我所知,您只需要明确定义什么是有效,并在
try/except中使用strptime。旁注:月份和日期的顺序可能会导致歧义 - 只需采用“01-02-2020”,将同时解析为 mm-dd-yyyy 和 dd-mm-yyyy。跨度> -
@MrFuppes Dateutil 可以匹配任何类型的日期格式,但它不能匹配 mmddyyyy 或 ddmmyyyy。出于这个原因,我正在这样做
标签: python list date datetime python-dateutil