Python 如何指定dateparser解析以将dd/mm/yyyy视为默认值而不是mm/dd/yyyy
dateparser包非常棒: 一般来说:我需要能够以“印度”日期格式解析日期 我使用的是python 2.7版本 确切地说,我明白了-Python 如何指定dateparser解析以将dd/mm/yyyy视为默认值而不是mm/dd/yyyy,python,python-2.7,date,datetime,Python,Python 2.7,Date,Datetime,dateparser包非常棒: 一般来说:我需要能够以“印度”日期格式解析日期 我使用的是python 2.7版本 确切地说,我明白了- >>> import dateparser >>> dateparser.parse('Tue, 06/07/2016') datetime.datetime(2016, 6, 7, 0, 0) 我需要 >>> import dateparser >>> dateparser.parse
>>> import dateparser
>>> dateparser.parse('Tue, 06/07/2016')
datetime.datetime(2016, 6, 7, 0, 0)
我需要
>>> import dateparser
>>> dateparser.parse('Tue, 06/07/2016')
datetime.datetime(2016, 7, 6, 0, 0)
如果您知道任何可以做到这一点的配置更改,那就太好了。
任何帮助都将不胜感激。:) 您可以使用
datetime.strtime
而不是dateparser
来执行此操作,因为它是python标准库的一部分:
In [13]:
import datetime as dt
dt.datetime.strptime('Tue, 06/07/2016', '%a, %d/%m/%Y')
Out[13]:
datetime.datetime(2016, 7, 6, 0, 0)
好的,看起来逗号正在打乱dateparser
,如果您没有在formats
arg中传递它,那么它会工作:
In [30]:
import dateparser
dateparser.parse('Tue, 06/07/2016', date_formats=['%A %d/%m/%Y'])
Out[30]:
datetime.datetime(2016, 7, 6, 0, 0)
您可以使用“日期格式”参数:
dateparser.parse('Tue, 06/07/2016', date_formats=['%d %B %Y'])
日期格式链接
dateparser
有设置
来处理类似的场景。除了指定日期格式,您还可以使用日期顺序
设置,如下所示
在[3]中:解析('2016年7月6日星期二',设置={'DATE_ORDER':'DMY'))
Out[3]:datetime.datetime(2016,7,6,0,0)
在此处查找如果有人仍然面临此问题,您可以查看
设置
documentation dateparser.readthedocs.io/en/latest/Settings.html
正如user739721
所指出的,您可以并且应该使用settings={'DATE\u ORDER':'DMY'}
作为解析的关键字参数。
如果您多次调用dateparser.parse()
,并且将其添加到任何地方都很痛苦,那么它可能会变得很麻烦。
为此,可以使用python自己的functools
import functools
import dateparser
parse = functools.partial(dateparser.parse, settings={'DATE_ORDER': 'DMY'})
现在,对parse的任何调用都将使用“DMY”设置
注意:如果最终将设置传递给解析调用,则先前的设置将被覆盖。因此,使用上面的解析定义
In [21]: parse('1 3 1970').strftime("%B")
Out[21]: 'March'
In [22]: parse('1 3 1970', settings={}).strftime("%B")
Out[22]: 'January'
dateparser会自动为我做这件事。编辑问题以使其更具可读性使用settings={'DATE_ORDER':'DMY'}
关键字参数来parse
(请参阅我的答案)仍然会生成datetime.datetime(2016,6,7,0,0)
谢谢@EdChum,但我确实想使用dateparser,因为我可以以任何格式获取日期。我的程序可能输入的内容有:“2015年6月6日”、“2015年6月16日”、“2015年6月16日”等。dateparser有助于无缝解码这些内容。但是我只需要在任何情况下都将mm/dd/yyyy视为dd/mm/yyyy。嗯,这只适用于一个正则表达式。如果我提供dateparser.parse('06/07/2016',date_formats=['%A%d/%m/%Y']),则不起作用。为什么它会起作用?字符串格式完全不同,您需要传递dateparser.parse('06/07/2016',date_formats=['%d/%m/%Y'])
为了解析该日期,这就是它接受一个格式字符串的原因。基本上,您需要传递一个格式列表来处理任何一种格式,如果某些内容解析不正确,则需要添加其他格式:date\u formats=['%d/%m/%Y','%A%d/%m/%Y']
将同时使用这两种格式。但在这种情况下,使用dateparser的全部意义都被击败了。它无缝地提取日期,无论格式是什么。我现在用叉子做一个印度格式。完成后将回复。