爲什麼增加日期時間的組件然後創建新日誌並不是一個好主意。主要是因爲你自己處理公曆是不是令人愉快的恕我直言,日期時間對象可以爲你做。
在那個筆記上,一個更直接的方法是在循環中爲datetime添加timedelta。例如,
>>> from datetime import timedelta
>>> times = 4
>>> cur_date = datetime.date(2017, 2, 24)
>>> for _ in range(times):
print('today is {0}, do something'.format(cur_date))
cur_date += timedelta(days=7)
today is 2017-02-24, do something
today is 2017-03-03, do something
today is 2017-03-10, do something
today is 2017-03-17, do something
根據您的使用情況,這也可以放置在生成器中。
>>> for dt in (cur_date + timedelta(days=x*7) for x in range(times)):
print('today is {0}, do something'.format(dt))
today is 2017-02-24, do something
today is 2017-03-03, do something
today is 2017-03-10, do something
today is 2017-03-17, do something
或熊貓pd.date_range
>>> import pandas as pd
>>> list(pd.date_range(start='2017-02-24', periods=4, freq='7D'))
[Timestamp('2017-02-24 00:00:00', freq='7D'),
Timestamp('2017-03-03 00:00:00', freq='7D'),
Timestamp('2017-03-10 00:00:00', freq='7D'),
Timestamp('2017-03-17 00:00:00', freq='7D')]
現在,如果你嘗試用你的方法,這個例子會發生什麼?
>>> year, month, day = 2017, 2, 24
>>> for i in range(0 , times):
day = day
fulldateadd = datetime.date(year, month, day)
print('today is {0}, do something'.format(fulldateadd))
day = day + 7
if day > 31:
day = day - 31
month = month + 1
today is 2017-02-24, do something
ValueErrorTraceback (most recent call last)
<ipython-input-255-7df608ebbf8e> in <module>()
1 for i in range(0 , times):
2 day = day
----> 3 fulldateadd = datetime.date(year, month, day)
4 print('today is {0}, do something'.format(fulldateadd))
5 day = day + 7
ValueError: day is out of range for month
2月沒有31天...所以你將不得不包括一個檢查與映射到每個月的天數。包括閏年的邏輯。
你沒有在任何地方回零通過零.. – miradulo
這是一個觀點。我將如何去編碼?我假設它發現剩餘,但我不知道該怎麼做。感謝您的回覆 – simons21
使用循環內的timedelta遞增日期時間,而不是在每次迭代時嘗試構造新的日期時間。 – miradulo