如何将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
相关产品推荐
相关产品推荐

