本文介紹了SimpleDateFormat-格式-月份9月-JDK16的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我剛剛將Java從JDK-15升級到JDK-16,在使用SimpleDateFormat
轉換Date
時看到一個問題。使用yyyy-MMM-dd
設置格式時,僅9月月份就提供了4個字符,而不是3個字符。
例如:2021-Sep-11
顯示為2021-Sept-11
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 150);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MMM-dd");
System.out.println(cal.getTime());
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
在我看來像是個蟲子。我在發布說明中看不到這方面的任何更新。有誰遇到過類似的問題嗎?在JDK-15之前工作正常。
推薦答案
如果沒有Locale
,請不要使用日期-時間格式/分析類型,因為文本是Locale
敏感的。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 150);
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MMM-dd", Locale.ENGLISH);
System.out.println(cal.getTime());
String formatted = format1.format(cal.getTime());
System.out.println(formatted);
}
}
輸出:
2021-Sep-11
請注意,java.util
日期-時間API及其格式化APISimpleDateFormat
已過時且容易出錯。建議完全停止使用,切換到java.time
、modern date-time API*。
使用現代日期-時間API:
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
// Change ZoneId as per your requirement e.g. ZoneId.of("Europe/London")
LocalDate date = LocalDate.now(ZoneId.systemDefault());
date = date.plusDays(150);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MMM-dd", Locale.ENGLISH);
String formatted = dtf.format(date);
System.out.println(formatted);
}
}
輸出:
2021-Sep-11
選中this answer以了解有關u
與y
的更多信息。
從Trail: Date Time了解有關現代日期-時間API的更多信息。
*出于任何原因,如果您必須堅持使用Java 6或Java 7,您可以使用ThreeTen-Backport,它將大部分java.time功能移植到Java 6&;7。如果您正在為Android項目工作,而您的Android API級別仍然不符合Java-8,請勾選Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
這篇關于SimpleDateFormat-格式-月份9月-JDK16的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,