鑑於datetime.datetime.now(),考慮到閏年,我如何得到本週的週一到週日,然後是去年的同一週一到週日?獲取週一和週日以及去年的週一和週日,同一周
我想到的一個想法是獲得-365天的timedelta,然後找到最近的星期一或星期天。我確信有更好的方法。
編輯:我不介意使用datetuil,如果在那裏有東西會使這更容易。
鑑於datetime.datetime.now(),考慮到閏年,我如何得到本週的週一到週日,然後是去年的同一週一到週日?獲取週一和週日以及去年的週一和週日,同一周
我想到的一個想法是獲得-365天的timedelta,然後找到最近的星期一或星期天。我確信有更好的方法。
編輯:我不介意使用datetuil,如果在那裏有東西會使這更容易。
如果使用dateutil是沒有問題的,只是用它:)
的relativedelta是對象,你需要 在這裏你將能夠減少一年到當前日期。
NOW = datetime.now()
last_monday = NOW+relativedelta(years=-1, weekday=MO)
last_sunday = NOW+relativedelta(years=-1, weekday=SU)
如果今年的這個星期一有日期N,同週一去年將有個約會N + 1如果沒有年02月29之間,否則去年週一將有個約會N + 2
from datetime import date, timedelta
today = date.today()
monday = today - timedelta(today.weekday())
sunday = monday + timedelta(6);
print monday, '-', sunday
monday_last_year = monday - timedelta(364) # We are trying to go to date N + 1.
if monday_last_year.weekday() == 1: # It will be either 0 or 1.
monday_last_year + timedelta(1) # This is date N + 2.
sunday_last_year = monday_last_year + timedelta(6)
print monday_last_year, '-', sunday_last_year
from datetime import date, timedelta
monday = date.today() - timedelta(days=date.today().weekday())
sunday = monday + timedelta(days=6)
對第二個問題的回答可能取決於什麼是「相同的」星期一星期日。我開始與天真的版本和調整,如果它是不正確:
last_year_mon = monday - timedelta(weeks=52)
last_year_sun = last_year_mon + timedelta(days=6)
幾年有53周,對不對?這很重要嗎? – 2012-01-27 16:49:39
您可以使用.isocalendar()
找回當年週數,然後從那裏獲得該周的週一/週日當前和前一年。
year, week, _ = datetime.datetime.now().isocalendar()
然後,使用iso_to_gregorian
從this answer:
this_sunday = iso_to_gregorian(year, week, 0)
this_monday = iso_to_gregorian(year, week, 1)
last_year_sunday = iso_to_gregorian(year - 1, week, 0)
last_year_monday = iso_to_gregorian(year - 1, week, 1)
非常酷。謝謝。 – 2012-01-27 16:57:21