首页 > 解决方案 > 使用 Python 解析北欧格式(首先是 DMY,然后是 YMD)日期的最佳方法

问题描述

我正在寻找一种使用以下“元格式”按优先顺序解析未知格式日期的方法:

  1. 日月年 (DMY)
  2. 年月日 (YMD)
  3. 潜在的其他格式(但这并不重要)

这是挪威、丹麦、芬兰和荷兰的几乎所有发票上的实际元格式,因此它应该是一个常见的用例。但是,似乎没有一个库能够处理它,而无需定义大量可能的格式。

再具体一点。我需要一个方法 ( parse) 来满足以下条件: parse("01-02-03") == "datetime.datetime(2003, 2, 1, 0, 0)" parse("2003-02-01") == "datetime.datetime(2003, 2, 1, 0, 0)"

但它也应该适用于其他分隔符等。

关于如何在不定义大量格式列表的情况下实现这一点的任何建议?

编辑:由于瑞典有不同的偏好,我更喜欢一个可以推广到 YMD 优于 DMY 的情况的答案。

标签: pythondate-parsing

解决方案


你试过使用pandas吗?恕我直言,这是导入日期的最佳和最干净的方法,因为它在 99% 的情况下都是开箱即用的,而大多数其他东西(如 dateutil)往往会失败。

import pandas as pd
pd.to_datetime('01-02-03', dayfirst=True)
pd.to_datetime('2003-02-01', dayfirst=True)

pandas 的另一个优点是它可以处理数组、列表和大多数其他类型,甚至支持使用 datetime-index 对数组(称为 DataFrames)进行字符串索引。

有关如何datetime.datetime使用 pandas 获取格式的更多信息:
只需附加.to_pydatetime()到您的解析器。

pd.to_datetime('2003-02-01', dayfirst=True).to_pydatetime()
# Out[]: datetime.datetime(2003, 2, 1, 0, 0)

推荐阅读