OverflowError:在python中解析日期时,有符号整数大于最大值

jav*_*dba 5 python datetime

尝试解析数字格式的日期时:

s ="2506181306"
Run Code Online (Sandbox Code Playgroud)

使用适当的日期格式:

DateFormat = '%d%m%H%M%S'
dateutil.parser.parse(s).strftime(DateFormat)
Run Code Online (Sandbox Code Playgroud)

我们最终遇到“整数大于最大值”错误:

In [15]:     dateutil.parser.parse(s).strftime(DateFormat)
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)
<ipython-input-15-9eead825f5c9> in <module>()
----> 1 dateutil.parser.parse(s).strftime(DateFormat)

/usr/local/lib/python2.7/site-packages/dateutil/parser.pyc in parse(timestr, parserinfo, **kwargs)
   1006         return parser(parserinfo).parse(timestr, **kwargs)
   1007     else:
-> 1008         return DEFAULTPARSER.parse(timestr, **kwargs)
   1009
   1010

/usr/local/lib/python2.7/site-packages/dateutil/parser.pyc in parse(self, timestr, default, ignoretz, tzinfos, **kwargs)
    402                 repl[attr] = value
    403
--> 404         ret = default.replace(**repl)
    405
    406         if res.weekday is not None and not res.day:

OverflowError: signed integer is greater than maximum
Run Code Online (Sandbox Code Playgroud)

那么解析该日期的正确方法是什么?是“大于最大值”是指日期中的单个字段-还是整个字符串?

更新 Jakob提供了正确的方法

In [21]: from datetime import datetime

In [22]:     datetime.strptime(s,DateFormat)
Out[22]: datetime.datetime(1900, 6, 25, 18, 13, 6)
Run Code Online (Sandbox Code Playgroud)

Jak*_*lat 5

DateFormat = '%d%m%H%M%S'
dateutil.parser.parse(s).strftime(DateFormat)
Run Code Online (Sandbox Code Playgroud)

您正在尝试解析此内容,而无需先设置格式。该错误是从引发的parse,调用链甚至没有进入该strftime调用。它试图为该字符串选择一种对它有意义的格式,而它选择的格式似乎是unix epoch时间戳,但最多应为31位(因为有符号),因此会出错。

您可能想要的是:

datetime.strptime(s,DateFormat)
Run Code Online (Sandbox Code Playgroud)