在 Python 中使用 strptime 进行时间比较

Time comparison using strptime in Python

now() 和 service.txt 文件中的日期时间之间的差异大于 25 秒时,我想进一步执行,因为我尝试了以下代码,但出现错误。

service.txt:

2021-07-19 21:39:07.876953

Python代码:

then = open("service.txt","r").read()
duration = datetime.datetime.now() - datetime.datetime.strptime(then, '%Y-%m-%d %H:%M:%S.%f')
if str(duration) > '0:00:25.0' :
    # do something

错误:

Traceback (most recent call last):
   File "D:\python_projects\test.py", line 41, in <module>
    duration = datetime.datetime.now() - datetime.datetime.strptime(then, '%Y-%m-%d %H:%M:%S.%f')
   File "C:\Python\lib\_strptime.py", line 565, in _strptime_datetime
    tt, fraction = _strptime(data_string, format)
   File "C:\Python\lib\_strptime.py", line 365, in _strptime
    data_string[found.end():]) ValueError: unconverted data remains:

then 的值为 2021-07-19 21:39:07.876953\n
请注意末尾的换行符,您在使用 strptime.

时没有考虑到

您可以通过

修复它
  1. then
  2. 中用 '' 替换 \n
then = open("service.txt","r").read().replace('\n', '')
  1. 在日期格式字符串中包含\n
datetime.datetime.strptime(then, '%Y-%m-%d %H:%M:%S.%f\n')

文件可能在末尾包含一个换行符 \n,它包含在 read() 的 return 值中。

您必须在将其传递给 strptime 之前将其从时间戳中删除,例如使用 rstrip 方法(参见 How can I remove a trailing newline?):

then = open("service.txt","r").read().rstrip()