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

Java中如何从MMM/yyyy格式的当前月份字符串获取上一个月份

Java实现获取上一月MMM/yyyy格式字符串方案

注意:必须指定英文Locale,否则非英文环境下无法解析SEP、AUG这类英文月份缩写

Java 8+ 推荐实现(线程安全)

使用java.time包下的YearMonth和DateTimeFormatter实现,代码如下:

import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class PreviousMonthDemo {
    // 全局复用格式化器,DateTimeFormatter是线程安全的
    private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter
            .ofPattern("MMM/yyyy", Locale.ENGLISH);

    public static String getPreviousMonth(String currentMonth) {
        // 解析输入字符串为YearMonth对象
        YearMonth yearMonth = YearMonth.parse(currentMonth, MONTH_FORMATTER);
        // 减去1个月后格式化输出,转为大写匹配需求格式
        return yearMonth.minusMonths(1).format(MONTH_FORMATTER).toUpperCase();
    }

    public static void main(String[] args) {
        String currentMonth = "SEP/2021";
        String previousMonth = getPreviousMonth(currentMonth);
        System.out.println(previousMonth); // 输出结果:AUG/2021
    }
}

Java 8 之前版本实现(不推荐)

如果使用JDK 8以下版本,可以用SimpleDateFormat配合Calendar实现,注意SimpleDateFormat不是线程安全的,不要定义为全局静态常量直接复用:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;

public class PreviousMonthDemo {
    public static String getPreviousMonth(String currentMonth) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("MMM/yyyy", Locale.ENGLISH);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(sdf.parse(currentMonth));
        // 月份减1
        calendar.add(Calendar.MONTH, -1);
        return sdf.format(calendar.getTime()).toUpperCase();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:27:03