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

