如何在PySpark Databricks中获取当前日期的最近5个工作日?
获取指定数量的最近工作日(排除周末)实现方法
当然有实现方法,核心逻辑是从当前日期开始逐天往前遍历,筛选出周一到周五的日期,直到收集够指定数量。以下是几种常用编程语言的具体实现:
Python 实现
利用标准库datetime就能轻松完成,无需额外依赖:
import datetime def get_recent_workdays(count=5): workdays = [] current_date = datetime.date.today() while len(workdays) < count: # weekday() 返回0=周一,4=周五,小于5即为工作日 if current_date.weekday() < 5: # 格式化为示例中的日期格式 formatted_date = current_date.strftime("%Y年%m月%d日(%A)") # 替换英文星期为中文 formatted_date = formatted_date.replace("Monday", "周一")\ .replace("Tuesday", "周二")\ .replace("Wednesday", "周三")\ .replace("Thursday", "周四")\ .replace("Friday", "周五") workdays.append(formatted_date) # 往前推一天 current_date -= datetime.timedelta(days=1) # 反转列表,得到从早到晚的顺序 return workdays[::-1] # 调用示例 print(get_recent_workdays(5))
代码说明
- 用
datetime.date.today()获取当前本地日期 - 通过
weekday()判断是否为工作日,跳过周六(5)和周日(6) - 格式化日期并将英文星期转为中文,匹配示例格式
- 最后反转列表,让结果按时间从早到晚排列
JavaScript 实现
浏览器或Node.js环境都能运行,无需额外包:
function getRecentWorkdays(count = 5) { const workdays = []; const weekDays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; let currentDate = new Date(); while (workdays.length < count) { const dayIndex = currentDate.getDay(); // 排除周日(0)和周六(6) if (dayIndex !== 0 && dayIndex !== 6) { const year = currentDate.getFullYear(); const month = String(currentDate.getMonth() + 1).padStart(2, '0'); const day = String(currentDate.getDate()).padStart(2, '0'); workdays.push(`${year}年${month}月${day}日(${weekDays[dayIndex]})`); } // 往前推一天 currentDate.setDate(currentDate.getDate() - 1); } // 反转得到从早到晚的顺序 return workdays.reverse(); } // 调用示例 console.log(getRecentWorkdays(5));
代码说明
getDay()返回0(周日)到6(周六),直接排除这两个值- 用
padStart(2, '0')确保月份和日期是两位数格式 - 收集够指定数量后反转列表,匹配示例中的顺序
通用逻辑总结
不管用哪种语言,核心步骤都是:
- 从当前日期开始,初始化一个空列表用于存储工作日
- 逐天往前推移日期,每次判断是否为周末
- 若为工作日则加入列表,直到列表长度达到指定数量
- 可选:反转列表,让结果按时间从早到晚排列
内容的提问来源于stack exchange,提问作者ASD
相关产品推荐
相关产品推荐

