【发布时间】:2013-09-03 10:36:32
【问题描述】:
在我的应用程序中,用户可以输入带有日期分隔符变体的 dd/mm/yy 格式的日期(比如他们可以使用 /,- 或空格作为分隔符)。他们还可以输入 4 位数的年份或 2 位数的年份,还可以输入 3 个字母的月份代码或 2 位数的月份代码。一旦我从用户那里得到日期,我想验证该格式是有效的日期格式,然后将其转换为“%d-%b-%Y”。在下面的函数中,我正在验证日期格式,但我不确定如何处理所有混合日期分隔符格式,如 01/12 2013、01-12 13、01 12/2013 等。可能有很多这些
def validate_date(date_str):
formats = ['%d-%b-%Y', '%d-%b-%y', '%d-%m-%Y', '%d-%m-%y',
'%d/%m/%Y', '%d/%m/%y', '%d/%b/%Y', '%d/%b/%y',
'%d %m %Y', '%d %m %y', '%d %b %Y', '%d %b %y',
'%d%m%Y', '%d%b%y', '%d%b%Y', '%d %b/%Y']
data = None
for fmt in formats:
try:
dateValue = datetime.datetime.strptime(date_str, fmt).date()
data = dateValue
break
except ValueError:
pass
if data is None:
# invalid date format
【问题讨论】:
-
与其重新发明轮子,也许你想看看
python-dateutils;它的parse()函数已经处理了这些格式,等等。 -
我认为您不应该允许它们,因为它们不代表任何语言环境中的有效文件格式。如果您查看 Martijn 提出的 lib,您会看到变化以 d/m/y 的顺序旋转,而不是混合分隔符。您也可以通过强制单独输入日、月和年来解决此问题(不完美),或提供日历小部件
-
感谢您的回复。我确实向客户(应用程序的所有者)建议我们最好使用日历小部件,但他们仍然希望允许用户输入带有混合分隔符的日期
标签: python date date-formatting date-parsing