[英]How to get previous month from current month in java?
我有以下場景。
String currentMonth = SEP/2021
這里我想要String previous month = AUG/2021.
我怎樣才能在java中實現這一點?
您可以使用java.time
API 來做到這一點。
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("MMM/uuuu")
.toFormatter(Locale.ROOT);
String currentMonth = "SEP/2021";
YearMonth currentYm = YearMonth.parse(currentMonth, dtf);
YearMonth previousYm = currentYm.minusMonths(1);
String previousMonth = previousYm.format(dtf);
System.out.println(previousMonth);
// If required, convert it into the UPPER CASE
System.out.println(previousMonth.toUpperCase());
}
}
輸出:
Aug/2021
AUG/2021
從Trail: Date Time 中了解有關現代日期時間 API * 的更多信息。
* 如果您正在為 Android 項目工作並且您的 Android API 級別仍然不符合 Java-8,請檢查 通過 desugaring 可用的 Java 8+ API 。 請注意,Android 8.0 Oreo 已提供對java.time
支持。
String currentMonth = "Sep/2021";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM/yyyy");
YearMonth yearMonthCurrent = YearMonth.parse(currentMonth, formatter);
YearMonth yearMonthPrevious = yearMonthCurrent.minusMonths(1);
String previousMonth = formatter.format(yearMonthPrevious);
我從你的問題中得知,你的輸入和輸出都具有相同的格式,月份縮寫全部大寫,這是非標准的。 我們當然可以處理。 我相信努力做一些基礎工作,這樣當我進入真正的工作時,我可以以簡單的方式完成。 在這種情況下,我正在為您的格式構建一個格式化程序,然后我可以使用它來解析輸入和格式化輸出。
Map<Long, String> monthAbbreviations = Arrays.stream(Month.values())
.collect(Collectors.toMap(m -> Long.valueOf(m.getValue()),
m -> m.getDisplayName(
TextStyle.SHORT_STANDALONE, Locale.ENGLISH)
.toUpperCase()));
DateTimeFormatter monthFormatter = new DateTimeFormatterBuilder()
.appendText(ChronoField.MONTH_OF_YEAR, monthAbbreviations)
.appendPattern("/u")
.toFormatter();
String currentMonthInput = "SEP/2021";
YearMonth currentMonth = YearMonth.parse(currentMonthInput, monthFormatter);
YearMonth previousMonth = currentMonth.minusMonths(1);
String previousMonthOutput = previousMonth.format(monthFormatter);
System.out.println(previousMonthOutput);
輸出是所需的:
2021 年 8 月
DateTimeFormatterBuilder
的兩個參數appendText
方法允許我們為字段定義我們自己的文本。 在這種情況下,我使用它來指定我們的大寫月份縮寫。 該方法接受從數字到文本的映射,因此我們需要一個映射 1=JAN、2=FEB 等。我正在從Month
枚舉的值開始的流操作中構建映射。
Oracle 教程:解釋如何使用 java.time 的日期時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.