You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取最近N天、月、年的datetime对象?

解决方案

Python的标准库datetime(配合可选第三方库python-dateutil处理复杂月份/年份偏移)就能满足需求,完全不需要手动操作时间戳(可避免夏令时等时间计算陷阱)。

1. 获取今天之前N天的0点datetime对象

核心思路:先提取当天的日期部分(自动截断时间到0:00),再循环减去timedelta(days=1)生成前N天的日期。

示例代码(N=3,假设今天为2024-11-18):

from datetime import datetime, timedelta

today = datetime.today().date()  # 仅保留日期,时间默认00:00
n = 3
for i in range(1, n+1):
    target_date = datetime.combine(today - timedelta(days=i), datetime.min.time())
    print(target_date.strftime("%y-%m-%d %H:%M"))

输出:

24-11-17 00:00
24-11-16 00:00
24-11-15 00:00

2. 获取最近N个月的每月第一天0点datetime对象

标准库可手动处理月份跨年逻辑,用第三方库python-dateutil则更简洁,能自动处理边界问题。

方式1:标准库实现

from datetime import datetime

today = datetime.today()
n = 3
for i in range(n):
    # 计算目标月份和年份
    target_month = today.month - i
    target_year = today.year
    if target_month <= 0:
        target_month += 12
        target_year -= 1
    # 生成当月第一天0点
    target_date = datetime(target_year, target_month, 1)
    print(target_date.strftime("%y-%m-%d %H:%M"))

方式2:python-dateutil实现(更简洁)

先安装库:pip install python-dateutil

from datetime import datetime
from dateutil.relativedelta import relativedelta

today = datetime.today()
n = 3
for i in range(n):
    target_date = (today - relativedelta(months=i)).replace(day=1, hour=0, minute=0, second=0, microsecond=0)
    print(target_date.strftime("%y-%m-%d %H:%M"))

两种方式输出(假设今天为2024-11-18):

24-11-01 00:00
24-10-01 00:00
24-09-01 00:00

3. 获取最近N年的每年第一天0点datetime对象

直接基于当前年份递减,生成每年的1月1日即可:

from datetime import datetime

today = datetime.today()
n = 3
for i in range(n):
    target_year = today.year - i
    target_date = datetime(target_year, 1, 1)
    print(target_date.strftime("%y-%m-%d %H:%M"))

输出(假设今天为2024-11-18):

24-01-01 00:00
23-01-01 00:00
22-01-01 00:00

关于你提供的代码的问题

用时间戳计算24*60*60的方式存在风险:部分地区夏令时切换会导致当天时长不是24小时,计算出的日期会出现偏差。推荐直接使用datetime和timedelta的组合,这是Python官方推荐的日期时间计算方式,更可靠且可读性更强。

内容的提问来源于stack exchange,提问作者curator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:15:59