[英]To get sunday's and saturday's date from a dataframe which has dates from Monday to tuesday
[英]get the last sunday and saturday's date in python
希望利用datetime
時間來獲取前一周(星期日到星期六)的開始和結束日期。
所以,如果今天是 2013 年 8 月 12 日,我想定義一個 function 來打印:
Last Sunday was 8/4/2013 and last Saturday was 8/10/2013
go我怎么寫這個?
編輯:好的,所以似乎有一些關於邊緣案例的問題。 對於星期六,我想要同一周,對於其他任何事情,我想要緊接today
日期之前的日歷周。
datetime.date.weekday星期一返回0
。 你需要調整它。
嘗試以下操作:
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2013, 8, 13)
>>> idx = (today.weekday() + 1) % 7 # MON = 0, SUN = 6 -> SUN = 0 .. SAT = 6
>>> idx
2
>>> sun = today - datetime.timedelta(7+idx)
>>> sat = today - datetime.timedelta(7+idx-6)
>>> 'Last Sunday was {:%m/%d/%Y} and last Saturday was {:%m/%d/%Y}'.format(sun, sat)
'Last Sunday was 08/04/2013 and last Saturday was 08/10/2013'
如果您被允許使用python-dateutil :
>>> import datetime
>>> from dateutil import relativedelta
>>> today = datetime.datetime.now()
>>> start = today - datetime.timedelta((today.weekday() + 1) % 7)
>>> sat = start + relativedelta.relativedelta(weekday=relativedelta.SA(-1))
>>> sun = sat + relativedelta.relativedelta(weekday=relativedelta.SU(-1))
>>> 'Last Sunday was {:%m/%d/%Y} and last Saturday was {:%m/%d/%Y}'.format(sun, sat)
'Last Sunday was 08/04/2013 and last Saturday was 08/10/2013'
我從這里找到了在我的情況下工作正常的最佳答案
試試這個
from datetime import datetime,timedelta
import time
def last_day(d, day_name):
days_of_week = ['sunday','monday','tuesday','wednesday',
'thursday','friday','saturday']
target_day = days_of_week.index(day_name.lower())
delta_day = target_day - d.isoweekday()
if delta_day >= 0: delta_day -= 7 # go back 7 days
return d + timedelta(days=delta_day)
from datetime import date
def satandsun(input):
d = input.toordinal()
last = d - 6
sunday = last - (last % 7)
saturday = sunday + 6
print date.fromordinal(sunday)
print date.fromordinal(saturday)
請注意,這似乎適用於您的所有情況:
>>> satandsun(date(2013, 8, 10))
2013-08-04
2013-08-10
>>> satandsun(date(2013, 8, 11))
2013-08-04
2013-08-10
>>> satandsun(date(2013, 8, 12))
2013-08-04
2013-08-10
>>> satandsun(date(2013, 8, 13))
2013-08-04
2013-08-10
>>> satandsun(date(2013, 8, 14))
2013-08-04
2013-08-10
>>> satandsun(date(2013, 8, 15))
2013-08-04
2013-08-10
>>> satandsun(date(2013, 8, 16))
2013-08-04
2013-08-10
>>> satandsun(date(2013, 8, 17))
2013-08-11
2013-08-17
>>> today = date.today().toordinal()
>>> lastWeek = today-7
>>> sunday = lastWeek - (lastWeek % 7)
>>> saturday = sunday + 6
>>> print "Last Sunday was %s and last Saturday was %s" % (date.fromordinal(sunday), date.fromordinal(saturday))
Last Sunday was 2013-08-04 and last Saturday was 2013-08-10
當我處理這個問題時,我提出了這個解決方案:
from datetime import datetime, timedelta
def prior_week_end():
return datetime.now() - timedelta(days=((datetime.now().isoweekday() + 1) % 7))
def prior_week_start():
return prior_week_end() - timedelta(days=6)
因此 OP 可以將其用作:
'Last Sunday was {:%m/%d/%Y} and last Saturday was {:%m/%d/%Y}'.format(prior_week_start(), prior_week_end())
import datetime
d = datetime.datetime.today()
sat_offset = (d.weekday() - 5) % 7
saturday = d - datetime.timedelta(days=sat_offset)
print("Last Saturday was on", saturday)
sun_offset = (d.weekday() - 6) % 7
sunday = d - datetime.timedelta(days=sun_offset)
print("Last Sunday was on", sunday)
這就是我所做的:
import datetime
def what_date_was_last(day_of_the_week):
today = datetime.date.today()
last_seven_dates_from_yesterday = {}
mod_count = -1
for i in range(7):
tdelta = datetime.timedelta(mod_count)
mod_count -= 1
date = today + tdelta
last_seven_dates_from_yesterday[date.weekday()] = date
days_of_the_week_dict = {
"mon": 0,
"tue": 1,
"wed": 2,
"thu": 3,
"fri": 4,
"sat": 5,
"sun": 6,
}
answer=last_seven_dates_from_yesterday
[days_of_the_week_dict[day_of_the_week]]
return answer
所以現在我可以跑了..
what_date_was_last("sun")
或一周中的任何一天
what_date_was_last("tue")
以下代碼對我有用:
today = datetime.date.today()
last_sunday_offset = today.weekday() + 1 # convert day format mon-sun=0-6 => sun-sat=0-6
last_sunday = today - datetime.timedelta(days=last_sunday_offset)
注意:上面我采用了正常的工作日(星期一為 0),但在 isoweekday 星期一為 1。有關更多詳細信息,您可以查看python 內置包 datetime.py 的weekday() 和 isoweekday()方法:
def weekday(self):
"Return day of the week, where Monday == 0 ... Sunday == 6."
return (self.toordinal() + 6) % 7
# Day-of-the-week and week-of-the-year, according to ISO
def isoweekday(self):
"Return day of the week, where Monday == 1 ... Sunday == 7."
# 1-Jan-0001 is a Monday
return self.toordinal() % 7 or 7```
最簡單的方法是:
import datetime
today = datetime.datetime.now(datetime.timezone.utc)
last_sat = today - datetime.timedelta(days=today.weekday()+2)
last_sun = today - datetime.timedelta(days=today.weekday()+1)
今天設置為 UTC,請隨意使用您喜歡的方式。
這適用於我的目的(我必須每周一運行一個腳本),所以我只是倒數日子。
from datetime import datetime, timedelta
prev_sun = datetime.now() - timedelta(days=8)
prev_sun = prev_sun.strftime('%m/%d/%Y')
prev_sat = datetime.now() - timedelta(days=2)
prev_sat = prev_sat.strftime('%m/%d/%Y')
希望這有助於讓事情變得美好和簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.