如何使用Python获取本周一上午6:30的对应时间?
Python 实现获取本周一6:30时间点方案
标准库实现(无需安装第三方依赖)
核心逻辑是通过datetime模块的weekday()方法判断当前周几,计算偏移得到周一的日期后设置指定时间:
import datetime def get_monday_630() -> datetime.datetime: now = datetime.datetime.now() # weekday()返回值规则:0=周一,1=周二,...,6=周日 days_offset = now.weekday() # 得到本周一0点时间 monday_start = now - datetime.timedelta(days=days_offset) # 设置时间为6:30 target = monday_start.replace(hour=6, minute=30, second=0, microsecond=0) # 边界处理:如果当前时间早于本周一6:30,自动返回上周一的6:30 # 不需要该逻辑可直接删除下面两行 if now < target: target -= datetime.timedelta(days=7) return target
效果验证
和需求示例完全匹配:
- 当前时间为
2021/6/28 15:00,返回值为2021-06-28 06:30:00 - 当前时间为
2021/7/2 15:00,返回值为2021-06-28 06:30:00
可选:第三方库python-dateutil简化实现
如果项目允许安装第三方依赖,用python-dateutil的相对时间偏移逻辑可以更简洁实现:
- 先安装依赖:
pip install python-dateutil - 代码实现:
from datetime import datetime from dateutil.relativedelta import relativedelta, MO def get_monday_630() -> datetime.datetime: now = datetime.now() # 直接取最近已过的周一,设置时间为6:30 return now + relativedelta(weekday=MO(-1), hour=6, minute=30, second=0, microsecond=0)
注意事项
- 若需要使用UTC时间,将代码中的
datetime.now()替换为datetime.utcnow()即可 - 如果业务逻辑不需要处理周一6:30前的边界(即只要是当前自然周,不管是否到周一6:30都取本周一的时间),删掉标准库实现中的边界判断代码即可
内容的提问来源于stack exchange,提问作者johnson
相关产品推荐
相关产品推荐

