對於一個特定的日期後,說2011-07-02,我怎麼能找到下一個星期一(或與此有關的任何工作日天)在該日期之後的日期?查找第一個星期一的日期指定的日期
回答
import datetime
def next_weekday(d, weekday):
days_ahead = weekday - d.weekday()
if days_ahead <= 0: # Target day already happened this week
days_ahead += 7
return d + datetime.timedelta(days_ahead)
d = datetime.date(2011, 7, 2)
next_monday = next_weekday(d, 0) # 0 = Monday, 1=Tuesday, 2=Wednesday...
print(next_monday)
使用嘗試
>>> dt = datetime(2011, 7, 2)
>>> dt + timedelta(days=(7 - dt.weekday()))
datetime.datetime(2011, 7, 4, 0, 0)
,那接下來的星期一是一個星期一後的7天,週二後6天,依此類推,並且還使用的是Python的datetime
類型報告週一0
,...,星期日爲6
。
有趣的是 - 當我試圖找到日期時間後(2013,1,1)與 「日期時間(2013,1 ,1)+ timedelta(days =(7 - datetime(2013,1,1).weekday()))「,我得到」datetime.datetime(2013,1,7,0,0)「,這是一個星期一。 – fixxxer
@fixxxer - 正如它在答案中所說:代碼使用'datetime' API的一些屬性,只有在尋找星期一的時候纔會起作用。由'phihag'提供的代碼更一般,可以找到任何即將到來的星期幾。 – Dirk
你覺得在timedelta中使用6而不是7會有幫助嗎? – fixxxer
您可以開始添加一天的日期對象和停止時,它的星期一。
>>> d = datetime.date(2011, 7, 2)
>>> while d.weekday() != 0: #0 for monday
... d += datetime.timedelta(days=1)
...
>>> d
datetime.date(2011, 7, 4)
這將給第一下星期一發出後日期:
import datetime
def get_next_monday(year, month, day):
date0 = datetime.date(year, month, day)
next_monday = date0 + datetime.timedelta(7 - date0.weekday() or 7)
return next_monday
print get_next_monday(2011, 7, 2)
print get_next_monday(2015, 8, 31)
print get_next_monday(2015, 9, 1)
2011-07-04
2015年9月7日
2015年9月7日
通過名單理解?
from datetime import *
[datetime.today()+timedelta(days=x) for x in range(0,7) if (datetime.today()+timedelta(days=x)).weekday() % 7 == 0]
(0 at the end is for next monday, returns current date when run on monday)
weekday = 0 ## Monday
dt = datetime.datetime.now().replace(hour=0, minute=0, second=0) ## or any specific date
days_remaining = (weekday - dt.weekday() - 1) % 7 + 1
next_dt = dt + datetime.timedelta(days_remaining)
這裏有一個簡潔和通用的替代上面稍微有分量的答案。
# Returns the date of the next given weekday after
# the given date. For example, the date of next Monday.
onDay = lambda date, day: date + datetime.timedelta(days=(day-date.weekday()+7)%7)
這個答案來得太晚而無法收集投票,但這是我的最愛。 – ASalazar
非常乾淨,你有我的投票。 – Liquidgenius
另一個簡單優雅的解決方案是使用熊貓補償。
我發現它在玩日期時非常有幫助和強大。
- 如果你想第一個星期日只需修改到頻率=「W-SUN」的頻率。
- 如果你想要一對夫婦下一個星期天,改變offsets.Day(天)。
- 使用大熊貓偏移讓你忽視假期,只有工作日和更多的工作。
您還可以使用應用方法的整個數據框輕鬆地應用這種方法。
# Getting the closest monday from a given date
closest_monday = pd.date_range(start=date, end=date + offsets.Day(6), freq='W-MON')[0]
# Adding a 'ClosestMonday' column with the closest monday for each row in a pandas df using apply
# Require you to have a 'Date' column in your df
def get_closest_monday(row):
return pd.date_range(start=row.Date, end=row.Date + offsets.Day(6), freq='W-MON')[0]
df['ClosestMonday'] = df.apply(lambda row: get_closest_monday(row), axis=1)
import datetime
d = datetime.date(2011, 7, 2)
while d.weekday() != 0:
d += datetime.timedelta(1)
- 1. 計算下一個星期一到指定日期的日期
- 2. 查找一個月的第三個星期日之前的星期一
- 3. 從給定日期查找星期日的第一個匹配項
- 4. jquery日期 - 確定一個星期日?
- 5. 查找最近的一個日期基於第一行日期
- 6. 查找日期範圍目前一個星期,每星期
- 7. 獲取指定日期的星期日
- 8. 查找上個星期日的日期從當前日期
- 9. 查找給定日期的星期幾
- 10. 查找當前星期的開始日期(星期一)
- 11. 查找第一個可用日期,給定SQL日期範圍
- 12. Django的日期字段得到一個星期就像星期日星期一
- 13. 獲取從給定日期星期一到星期五的星期日期
- 14. 從當前日期獲取星期幾,並指定星期的第一天
- 15. 找到下個星期的第一個日期 - Ruby on Rails
- 16. 獲取基於給定日期的星期一至星期日
- 17. 查找下一個星期一的Java日期6:00,例如
- 18. 星期一組的日期?
- 19. 查找最後一個星期日
- 20. strtotime認爲「下個月的第一個星期日」=星期三?
- 21. 查找給定日期的一個季度的結束日期
- 22. 獲取特定年份的第一個星期日期
- 23. 獲取指定日期的月份的第一個和最後一個日期
- 24. 試圖得到一個星期的第一天和最後一天的日期,給定一個任務。日期
- 25. 選擇日期這個星期一和這個星期五之間的日期
- 26. 查找輸入日期的下一個和上一個日期
- 27. 計算指定日期的星期
- 28. 指定日期的獲取星期數
- 29. 在PHP中找出第n周的星期一的日期?
- 30. 查找下一個日期的一週中的日期
http://docs.python.org/library/datetime.html#datetime.date.weekday –