如何指定dateparser解析来将dd / mm / yyyy视为默认值而不是mm / dd / yyyy

时间:2016-06-09 12:36:47

标签: python python-2.7 date datetime

dateparser包非常棒:https://dateparser.readthedocs.io/en/latest/

通用:我需要能够解析"印度"日期格式。

我使用的是python 2.7版本

准确地说:我得到了 -

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

如果您知道任何可以执行此操作的配置更改,那就太棒了。 任何帮助将不胜感激。 :)

4 个答案:

答案 0 :(得分:3)

您可以使用datetime.strptime来执行此操作,而不是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)

答案 1 :(得分:1)

dateparsersettings来处理这样的情况。您也可以使用DATE_ORDER设置,而不是指定date_formats。

In [3]: parse('Tue, 06/07/2016', settings={'DATE_ORDER': 'DMY'}) Out[3]: datetime.datetime(2016, 7, 6, 0, 0)

在这里查看more settings

答案 2 :(得分:0)

您可以使用date_formats参数:

dateparser.parse('Tue, 06/07/2016', date_formats=['%d %B %Y'])

date_formats链接https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

答案 3 :(得分:0)

如果有人仍然面临这个问题,您可以查看 Settings 文档 dateparser.readthedocs.io/en/latest/settings.html

正如 user739721 所指出的,您可以并且应该使用 settings={'DATE_ORDER': 'DMY'} 作为 parse 的关键字参数。 如果您多次调用 dateparser.parse() 并且随处添加它会很麻烦,这会变得很麻烦。 为此,可以使用 python 自己的 partial

中的 functools
import functools
import dateparser
parse = functools.partial(dateparser.parse, settings={'DATE_ORDER': 'DMY'})

现在任何对解析的调用都将使用“DMY”设置。

注意:如果最终将设置传递给解析调用,则较早的设置将被覆盖。所以,有了上面的解析定义,

In [21]: parse('1 3 1970').strftime("%B")
Out[21]: 'March'

In [22]: parse('1 3 1970', settings={}).strftime("%B")
Out[22]: 'January'