我正在嘗試格式化日期時間物件,并且我撰寫了一個小函式來確定日期時間物件是日期還是日期時間物件。但是,我嘗試過的一切都不起作用。
使用 datetime.date.today() 和 datetime.datetime.now() 生成日期和日期時間并將其分配給 dtDate。
我的第一次嘗試是 isinstance() :
dtDate = datetime.date.today()
# dtDate = datetime.datetime.now()
if isinstance(dtDate, date) :
sDate = dtDate.strftime('%x')
elif isinstance(dtDate, datetime) :
sDate = dtDate.strfttime('%x %X')
但是無論是日期還是日期時間都會觸發。如果我更具體一點,比如“datetime.date”說“arg 2 must be type or tuple”。
我還嘗試檢測物件是否具有小時欄位:
if dtDate.hour :
sDate = dtDate.strftime('%x %X')
else :
sDate = dtDate.strfttime('%x')
但是,如果物件純粹是一個日期,而沒有小時屬性,那會嚇壞了。
即使是 try/except 塊也有問題:
try :
if dtDate.hour :
sDate = dtDate.strftime('%x %X')
except :
sDate = dtDate.strfttime('%x')
這將回傳 'datetime.date' 物件沒有日期物件的屬性 'strfttime'。
最后,我嘗試比較型別:
if type(dtDate) is datetime.date :
sDate = dtDate.strftime('%x')
else :
sDate = dtDate.strfttime('%x %X')
正確回傳日期,但不是日期時間物件(回傳 'datetime.datetime' 物件沒有屬性 'strfttime')
對不起,腦殘,但我完全沒有想法。
uj5u.com熱心網友回復:
如果您查看datetime該類的源代碼(或datetime在 Mac上使用 IDE只需命令 單擊),您會注意到datetime該類實際上是 的子類date:
class datetime(date):
...
因此,isinstance(dtDate, date)即使dtDate是datetime物件也會為真。
您可以通過首先檢查更具體的型別來解決此問題:
if isinstance(dtDate, datetime):
sDate = dtDate.strftime('%x %X')
elif isinstance(dtDate, date):
sDate = dtDate.strftime('%x')
完整代碼:
from datetime import date, datetime
# dtDate = date.today()
dtDate = datetime.now()
if isinstance(dtDate, datetime):
sDate = dtDate.strftime('%x %X')
elif isinstance(dtDate, date):
sDate = dtDate.strftime('%x')
print(sDate)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/342511.html
