python - 使用 Python 解析北欧格式(首先是 DMY,然后是 YMD)日期的最佳方法
问题描述
我正在寻找一种使用以下“元格式”按优先顺序解析未知格式日期的方法:
- 日月年 (DMY)
- 年月日 (YMD)
- 潜在的其他格式(但这并不重要)
这是挪威、丹麦、芬兰和荷兰的几乎所有发票上的实际元格式,因此它应该是一个常见的用例。但是,似乎没有一个库能够处理它,而无需定义大量可能的格式。
再具体一点。我需要一个方法 ( 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 的情况的答案。
解决方案
你试过使用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)
推荐阅读
- python - Numpy 和 Matplotlib 突然无法在 Atom 中导入,尽管它在终端中运行良好
- swift - 如何在 Alamofire 参数中发布整数
- r - 如何在不重新编译的情况下添加断点来调试我的 R 包
- javascript - React Native 自定义类未设置属性
- c++ - const char[] 默认函数参数
- c# - 将图像发送到 yolo (darknet) 并接收对象位置和类型
- c++ - 无法在 VS2015 上绘制路径,但代码在 VS2010 上运行良好
- c++ - 速度和内存对比
- github - 分布式张量流源码
- c# - 如何在数据网格上显示 sql 命令