我正在使用datetime Python模塊。 我想計算從當前日期起6個月的日期。 有人能夠給我一點幫助嗎? app
我要從當前日期起6個月生成日期的緣由是要產生一個審閱日期 。 若是用戶將數據輸入到系統中,則其輸入日期爲6個月。 函數
PyQt4的QDate類具備addmonths函數。 ui
>>>from PyQt4.QtCore import QDate >>>dt = QDate(2009,12,31) >>>required = dt.addMonths(6) >>>required PyQt4.QtCore.QDate(2010, 6, 30) >>>required.toPyDate() datetime.date(2010, 6, 30)
另外一個解決方案-但願有人會喜歡它: spa
def add_months(d, months): return d.replace(year=d.year+months//12).replace(month=(d.month+months)%12)
該解決方案在全部狀況下都沒法正常工做29,30,31天,所以須要更強大的解決方案(如今再也不那麼好了:)): code
def add_months(d, months): for i in range(4): day = d.day - i try: return d.replace(day=day).replace(year=d.year+int(months)//12).replace(month=(d.month+int(months))%12) except: pass raise Exception("should not happen")
在1new_month = 121的狀況下修改了Johannes Wei的答案。這對我來講很是有效。 月份能夠是正數或負數。 io
def addMonth(d,months=1): year, month, day = d.timetuple()[:3] new_month = month + months return datetime.date(year + ((new_month-1) / 12), (new_month-1) % 12 +1, day)
這就是我想出的。 它能夠移動正確的月數和年數,但會忽略天數(這是我當時所須要的)。 import
import datetime month_dt = 4 today = datetime.date.today() y,m = today.year, today.month m += month_dt-1 year_dt = m//12 new_month = m%12 new_date = datetime.date(y+year_dt, new_month+1, 1)
我使用此功能更改年份和月份,但保留日期: require
def replace_month_year(date1, year2, month2): try: date2 = date1.replace(month = month2, year = year2) except: date2 = datetime.date(year2, month2 + 1, 1) - datetime.timedelta(days=1) return date2
您應該寫: date
new_year = my_date.year + (my_date.month + 6) / 12 new_month = (my_date.month + 6) % 12 new_date = replace_month_year(my_date, new_year, new_month)