我已經從另一個程式中匯出了一些資料,在那里我增加了車站等待的時間。所以過了一段時間,我的等待時間格式為“32:00:00:33.7317”。
這是我將每個日期轉換為我想要的格式的功能:
def Datum_formatieren(Datensatz):
if len(str(Datensatz)) == 24:
return datetime.datetime.strptime(Datensatz, "%d.%m.%Y %H:%M:%S.%f").strftime("%d%H%M")
elif len(str(Datensatz)) == 3:
return 0
#return datetime.datetime.strptime(Datensatz, "%S.%f").strftime("%d%H%M")
elif len(str(Datensatz)) == 5:
return str(Datensatz)
elif len(str(Datensatz)) == 7:
return str(Datensatz)
elif len(str(Datensatz)) == 6:
return datetime.datetime.strptime(str(Datensatz), "%S.%f").strftime("%d%H%M")
elif len(str(Datensatz)) == 9 or len(str(Datensatz))==10:
return datetime.datetime.strptime(str(Datensatz), "%M:%S.%f").strftime("%d%H%M")
elif len(str(Datensatz)) == 12 or len(str(Datensatz)) ==13:
return datetime.datetime.strptime(str(Datensatz), "%H:%M:%S.%f").strftime("%d%H%M")
elif len(str(Datensatz)) == 15 or len(str(Datensatz)) == 16:
return datetime.datetime.strptime(str(Datensatz), "%d:%H:%M:%S.%f").strftime("%d%H%M")
我收到以下錯誤,因為 python 無法識別 30 或 31 以上的天數:
ValueError: time data '32:00:00:33.7317' does not match format '%d:%H:%M:%S.%f'
如何將所有天數超過 31 天的條目轉換為 python 可以識別的格式?
uj5u.com熱心網友回復:
您正在濫用日期時間,它僅映射到正確的日期時間 - 而不是“經過任何時間”。
使用 atimedelta代替:
改編自datetime.timedelta:
from datetime import datetime, timedelta delta = timedelta( days=50, seconds=27, microseconds=10, milliseconds=29000, minutes=5, hours=8, weeks=2 ) print(datetime.now() delta)
您可以將任何 timedelta 添加到正常的日期時間并獲取結果值。
如果你想堅持你的方法,你可能想縮短它:
if len(str(Datensatz)) == 9 or len(str(Datensatz))==10:
if len(Datensatz) in (9,10):
相關:如何從一個簡單的字串構造一個 timedelta 物件(查看它的答案并從中獲取靈感)
uj5u.com熱心網友回復:
您正在獲取
Datensatz變數,使用 將其轉換為字串str(),然后將其決議回內部表示;幾乎總是有更好的方法來做到這一點。您能否檢查
Datensatz變數的型別,也許print(type(Datensatz))或基于您的其余代碼?該變數很可能
Datensatz已經包含天數、小時數、分鐘數和秒數的欄位。將邏輯直接基于這些通常要好得多,而不是轉換為字串并回傳。正如其他人指出的那樣,您正在嘗試使用 a
datetime.datetime來表示時間間隔;這是不正確的。相反,您需要:使用
datetime.timedelta為時間間隔設計的型別。它可以正確處理超過 30 天的周期:>>> print(datetime.timedelta(days=32, seconds=12345)) 32 days, 3:25:45 >>>由于您的函式名為
Datum_formatieren,因此您可能打算Datensatz將其轉換為字串,以輸出給用戶或另一個系統。在這種情況下,您應該直接輸入欄位
Datensatz并適當地轉換它們,可能使用 f 字串或 % 格式。根據情況,您可能需要進行一些算術運算。詳細資訊將取決于Datensatz輸出所需的型別和格式。
uj5u.com熱心網友回復:
您不能datetime.datetime.strptime()用來構造無效的日期時間 - 為什么要查看其他答案。
但是,您可以利用datetime.timespan:
import datetime
def Datum_formatieren(Datensatz):
# other cases omitted for brevity
# Input: "days:hours:minutes:seconds.ms"
if len(Datensatz) in (15,16):
k = list(map(float,Datensatz.split(":")))
secs = k[0]*60*60*24 k[1]*60*60 k[2]*60 k[3]
td = datetime.timedelta(seconds=secs)
days = td.total_seconds() / 24 / 60 // 60
hours = (td.total_seconds() - days * 24*60*60) / 60 // 60
minuts = (td.total_seconds() - days *24*60*60 - hours * 60*60) // 60
print(td)
return f"{td.days}{int(hours):02d}{int(minuts):02d}"
print(Datum_formatieren("32:32:74:33.731"))
輸出"32:32:74:33.731":
33 days, 9:14:33.731000 # timespan
330914 # manually parsed
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/448040.html
