在python中解析可以是多种格式的日期

发布于 2021-01-29 18:33:06

我想解析一个日期,它可以是几种我事先知道的格式。如果无法解析,则返回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中做同样的事情?

关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用try/exceptcatchValueError来尝试使用不匹配的格式时发生的情况。如@Bakuriu所述,您可以在找到匹配项时停止迭代以避免不必要的解析,然后在my_date未定义因为未找到匹配格式而定义行为时:

    您可以使用try/exceptcatchValueError来尝试使用不匹配的格式时发生的情况:

    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'>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看