3 回答

TA貢獻1865條經驗 獲得超7個贊
如果要計算時間增量,則需要對datetime實例進行算術運算。您可以使用如下所示的函數將結果轉換findall()為 a :datetimedatetime.strptime()
import re
from datetime import datetime, timedelta, date
string = 'configuration change at 18:06:39 EET Thu Jan 30 2020 by netbrain'
matches = re.findall(r"(\d{2}:\d{2}:\d{2}) \w+ \w+ (\w{3} \d{2} \d{4})", string)
chg_date_str = ' '.join(map(str, matches[0]))
chg_date = datetime.strptime(chg_date_str, "%H:%M:%S %b %d %Y")
now = datetime.now()
time_difference = now - chg_date
print(chg_date_str)
print(time_difference)
輸出:
18:06:39 Jan 30 2020
5 days, 16:34:32.661231

TA貢獻1725條經驗 獲得超8個贊
你的代碼有很多問題。
findall
返回元組列表。您應該迭代findall
結果或使用search
而不是findall
您使用 連接部分數據
''
,但您需要' '
%y
是 4 位數年份的錯誤模式,應該使用%Y
您將日期轉換為字符串并嘗試找出兩個字符串之間的差異...
我認為你的代碼應該是這樣的:
import re
from datetime import datetime
string = 'configuration change at 18:06:39 EET Thu Jan 30 2020 by netbrain'
chg_dates = re.findall(r"(\d{2}:\d{2}:\d{2}) \w+ \w+ (\w{3} \d{2} \d{4})", string)
for chg_date in chg_dates:
chg_date_str = ' '.join(map(str, chg_date))
chg_date_date = datetime.strptime(chg_date_str, "%H:%M:%S %b %d %Y")
now = datetime.now()
time_difference = now - chg_date_date
print(time_difference)

TA貢獻1858條經驗 獲得超8個贊
其他人回答了它,但有兩個主要問題。
您試圖從彼此減去 2 個字符串,python 不能這樣做,而是您應該減去 2 個 datetime 對象。此外,re.findall()返回一個長度為 1 的列表,因此當連接chg_date到 a時,chg_date_str您實際上必須連接返回列表中的第 0 個項目,即chg_date_str[0]. 如果您使用 a', '而不是空字符串連接,它看起來也更干凈,當然,相應地更新 datetime 參數。
import re
from datetime import datetime, timedelta, date
string = 'configuration change at 18:06:39 EET Thu Jan 30 2020 by netbrain'
chg_date = re.findall(r"(\d{2}:\d{2}:\d{2}) \w+ \w+ (\w{3} \d{2} \d{4})", string)
chg_date_str = ', '.join(map(str, chg_date[0]))
datetime_object = datetime.strptime(chg_date_str, '%H:%M:%S, %b %d %Y')
time_difference = datetime.now() - datetime_object
print(chg_date_str)
print(time_difference)
輸出:
18:06:39, Jan 30 2020
5 days, 19:05:05.272112
我相信這就是你想要的。
添加回答
舉報