对于一个特定的日期后,说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. jquery日期 - 确定一个星期日?
- 4. 查找日期范围目前一个星期,每星期
- 5. 获取指定日期的星期日
- 6. 查找上个星期日的日期从当前日期
- 7. 查找给定日期的星期几
- 8. 查找当前星期的开始日期(星期一)
- 9. 查找第一个可用日期,给定SQL日期范围
- 10. Django的日期字段得到一个星期就像星期日星期一
- 11. 获取从给定日期星期一到星期五的星期日期
- 12. 从当前日期获取星期几,并指定星期的第一天
- 13. 获取基于给定日期的星期一至星期日
- 14. 查找下一个星期一的Java日期6:00,例如
- 15. 查找最后一个星期日
- 16. strtotime认为“下个月的第一个星期日”=星期三?
- 17. 试图得到一个星期的第一天和最后一天的日期,给定一个任务。日期
- 18. 指定日期的获取星期数
- 19. 计算指定日期的星期
- 20. 在PHP中找出第n周的星期一的日期?
- 21. C#获取下一个第N个星期五日期从今天的日期
- 22. 上个星期一的日期Excel
- 23. 根据“日期”字段查找一周的星期一
- 24. 如何获取当年第一个星期一的日期(php)?
- 25. 获取本周第一个星期一的日期?
- 26. PHP星期一星期一和星期六日期问题
- 27. T-sql日期星期一
- 28. 本周星期一日期
- 29. 如何查找两个指定日期之间的日期?
- 30. 找到特定日期的星期几
http://docs.python.org/library/datetime.html#datetime.date.weekday –