在python中解析可以是多种格式的日期
我想解析一个日期,它可以是几种我事先知道的格式。如果无法解析,则返回nil。在红宝石中,我确实这样:
DATE_FORMATS = ['%m/%d/%Y %I:%M:%S %p', '%Y/%m/%d %H:%M:%S', '%d/%m/%Y %H:%M', '%m/%d/%Y', '%Y/%m/%d']
def parse_or_nil(date_str)
parsed_date = nil
DATE_FORMATS.each do |f|
parsed_date ||= DateTime.strptime(date_str, f) rescue nil
end
parsed_date
end
这是简洁而有效的。如何在Python中做同样的事情?
-
您可以使用
try/except
catchValueError
来尝试使用不匹配的格式时发生的情况。如@Bakuriu所述,您可以在找到匹配项时停止迭代以避免不必要的解析,然后在my_date
未定义因为未找到匹配格式而定义行为时:您可以使用
try/except
catchValueError
来尝试使用不匹配的格式时发生的情况:from datetime import datetime DATE_FORMATS = ['%m/%d/%Y %I:%M:%S %p', '%Y/%m/%d %H:%M:%S', '%d/%m/%Y %H:%M', '%m/%d/%Y', '%Y/%m/%d'] test_date = '2012/1/1 12:32:11' for date_format in DATE_FORMATS: try: my_date = datetime.strptime(test_date, date_format) except ValueError: pass else: break else: my_date = None print my_date # 2012-01-01 12:32:11 print type(my_date) # <type 'datetime.datetime'>