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

如何将YYYYMMDD格式日期转换为前一日?是否有内置函数?

处理YYYYMMDD格式日期转前一日的内置方案

嘿,这个需求其实在绝大多数主流编程语言/数据库里都有现成的内置工具能搞定,完全不用自己手动写逻辑去处理闰年、月末这些头疼的边界情况!下面给你举几个最常用场景的实现方式:

Python 实现

Python的datetime模块是标准库(内置)的,直接就能用,不用额外装依赖:

from datetime import datetime, timedelta

# 输入的YYYYMMDD格式日期字符串
input_date_str = "20080101"
# 把字符串转成datetime对象
input_date = datetime.strptime(input_date_str, "%Y%m%d")
# 减去一天得到前一日的日期对象
prev_date = input_date - timedelta(days=1)
# 再转回YYYYMMDD格式的字符串
prev_date_str = prev_date.strftime("%Y%m%d")
print(prev_date_str)  # 输出: 20071231

这里用到的strptime、strftime和timedelta都是Python标准库的内置工具,完美覆盖你说的跨年、月初转月末的场景。

MySQL 实现

MySQL也有一套内置的日期处理函数,步骤是先转日期类型、减一天、再转回格式:

SELECT DATE_FORMAT(DATE_SUB(STR_TO_DATE('20080101', '%Y%m%d'), INTERVAL 1 DAY), '%Y%m%d') AS prev_date;

执行这条SQL后会直接返回20071231,其中STR_TO_DATE、DATE_SUB、DATE_FORMAT全是MySQL的内置函数。

PostgreSQL 实现

PostgreSQL的处理逻辑类似,用内置函数完成转日期、减间隔、格式化的流程:

SELECT TO_CHAR(TO_DATE('20080101', 'YYYYMMDD') - INTERVAL '1 day', 'YYYYMMDD') AS prev_date;

运行后同样会得到20071231的结果,用到的TO_DATE和TO_CHAR都是PostgreSQL自带的。

重要提醒

千万别自己写字符串切割+数字加减的逻辑!比如手动把日期拆成年月日再减1,很容易在闰年2月、31号转30号、1月1号转上年12月31号这些场景出bug,用内置工具就完全不用操心这些细节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:19:21