Java中传入任意YYYYMM格式年月字符串获取下一个同格式年月的方法
实现方案
核心思路优先选择编程语言原生日期时间库实现,无需手动处理跨年、月份边界判断,代码稳定性和扩展性更好,也可以根据场景选择极简的手动拆分实现。
方案1:通用原生库实现(推荐)
完全不需要关注边界逻辑,后续如果需要调整为偏移N个月、修改输出格式等需求,改动成本极低。
以下是不同主流语言的实现示例:
- Python实现:
from datetime import datetime from dateutil.relativedelta import relativedelta def get_next_month(yyyymm: str) -> str: dt = datetime.strptime(yyyymm, "%Y%m") next_dt = dt + relativedelta(months=1) return next_dt.strftime("%Y%m")
如果不想引入第三方依赖,仅用Python标准库也可以实现:
from datetime import datetime, timedelta def get_next_month(yyyymm: str) -> str: dt = datetime.strptime(yyyymm, "%Y%m") # 取当月28日加4天,必然落入下一个月 next_month_dt = dt.replace(day=28) + timedelta(days=4) return next_month_dt.strftime("%Y%m")
- Java 8+实现:
import java.time.YearMonth; import java.time.format.DateTimeFormatter; public class MonthUtil { private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMM"); public static String getNextMonth(String yyyymm) { return YearMonth.parse(yyyymm, FORMATTER) .plusMonths(1) .format(FORMATTER); } }
- JavaScript实现:
function getNextMonth(yyyymm) { const year = parseInt(yyyymm.slice(0, 4)); const month = parseInt(yyyymm.slice(4)) - 1; // 直接构造下一个月的第一天日期对象 const nextMonth = new Date(year, month + 1, 1); return `${nextMonth.getFullYear()}${String(nextMonth.getMonth() + 1).padStart(2, '0')}`; }
方案2:手动拆分实现(轻量场景可用)
仅针对当前需求的极简实现,逻辑简单性能更高,仅需要处理12月转下一年1月的边界:
def get_next_month(yyyymm: str) -> str: year = int(yyyymm[:4]) month = int(yyyymm[4:]) if month == 12: year += 1 month = 1 else: month += 1 return f"{year}{month:02d}"
内容的提问来源于stack exchange,提问作者Tarik
相关产品推荐
相关产品推荐

