我有以下場景。
String currentMonth = SEP/2021
這里我要 String previous month = AUG/2021.
我怎樣才能在java中實作這一點?
uj5u.com熱心網友回復:
時間
您可以使用java.timeAPI 來執行此操作。
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
ONLINE DEMO
從Trail: Date Time 中了解有關現代日期時間 API * 的更多資訊。
* 如果您正在為 Android 專案作業并且您的 Android API 級別仍然不符合 Java-8,請檢查通過 desugaring 可用的 Java 8 API。請注意,Android 8.0 Oreo 已提供對java.time.
uj5u.com熱心網友回復:
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);
uj5u.com熱心網友回復:
時間
我從你的問題中得知,你的輸入和輸出都具有相同的格式,月份縮寫全部大寫,這是非標準的。我們當然可以處理。我相信努力做一些基礎作業,這樣當我進入真正的作業時,我可以以簡單的方式完成。在這種情況下,我正在為您的格式構建一個格式化程式,然后我可以使用它來決議輸入和格式化輸出。
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 月
的兩個引數appendText方法DateTimeFormatterBuilder允許我們為一個欄位定義我們自己的文本。在這種情況下,我使用它來指定我們的大寫月份縮寫。該方法接受從數字到文本的映射,因此我們需要映射 1=JAN、2=FEB 等。我正在從Month列舉值開始的流操作中構建映射。
關聯
Oracle 教程:解釋如何使用 java.time 的日期時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327953.html
