Python datetime.striptime 错误 - 将时间字符串解析为时间对象

1 投票
2 回答
2566 浏览
提问于 2025-04-18 03:14

我想把一个时间字符串转换成时间对象,然后计算它和当前时间的差距。

这里有个例子:

>>> user_reg_time = datetime.datetime.strptime("20091129060140", "%Y%M%d%H%m%S")
>>> user_reg_time = datetime.datetime.strptime("20140404134026", "%Y%M%d%H%m%S")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/_strptime.py", line 328, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: 6

注意,当时间字符串是 20091129060140 时没有错误,但当时间字符串是 20140404134026 时我就遇到了上面的错误。除了日期,两个时间字符串没有任何不同(比如长度)。这怎么可能呢?

2 个回答

1

还有一种方法可以做到这一点,使用 python-dateutil 这个库。

In [1]: from dateutil import parser

In [2]: parser.parse('20091129060140')
Out[2]: datetime.datetime(2009, 11, 29, 6, 1, 40)

In [3]: parser.parse('20140404134026')                                                                            
Out[3]: datetime.datetime(2014, 4, 4, 13, 40, 26)
1

问题在于你把 %m 和 %M 搞混了,正确的顺序应该是:

%Y%m%d%H%M%S

这两个地方都要这样写。

%m 代表月份(01 到 12),而 %M 代表分钟(00 到 59)。

下面是正确的代码:

user_reg_time = datetime.datetime.strptime("20091129060140", "%Y%m%d%H%M%S")
user_reg_time = datetime.datetime.strptime("20140404134026", "%Y%m%d%H%M%S")

撰写回答