[英]How to overwrite a datetime.now() object
我正在嘗試實現一個get_date
函數,我想用它來構建更高級的函數(例如, get_payment_date
給出的get_payment_date
)。 這是我的代碼:
from datetime import datetime
def get_date(year=None, month=None, day=None):
'''Returns now, with the given parts overwritten'''
dt = datetime.now()
if not year is None : dt.year = year
if not month is None : dt.month = month
if not day is None : dt.day = day
return dt
def get_payment_date():
return get_date(day=15)
print get_payment_date()
但如果失敗了:
AttributeError: attribute 'day' of 'datetime.date' objects is not writable
我知道了。 我怎么解決這個問題? 我怎樣才能“覆蓋” now
某些部分?
datetime.datetime
和datetime.date
對象是不可變的。
您可以執行dt = dt.replace(year = year)
來獲取基於舊日期對象的新日期時間對象。
你不一定要這樣做三次,但這樣的事情可能適合你:
def get_date(**kwargs):
'''Returns now, with the given parts overwritten'''
dt = datetime.now()
# optionally, depending on intended use of this function
kwargs = { k : v for k,v in kwargs.items() if v is not None }
return dt.replace(**kwargs)
這就是我想要的(感謝Steve Jessop):
from datetime import datetime
def get_date(year=None, month=None, day=None):
'''Returns now, with the given parts overwritten'''
dt = datetime.now()
kwargs = {}
if year : kwargs['year'] = year
if month : kwargs['month'] = month
if day : kwargs['day'] = day
if kwargs : return dt.replace(**kwargs)
else : return dt
def get_payment_date():
return get_date(day=15)
print get_payment_date()
請注意,我需要構建一個kwargs
因為dt.replace
不接受None
作為year / month / day
。 另外,我刪除is not None
檢查,因為0值也意味着沒有替換。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.