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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:21:00