String dateFormat = "20211109";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
我收到一個錯誤 Unparseable date: "20211109"
如何將日期轉換為給定格式并決議?
uj5u.com熱心網友回復:
鑒于 的格式,您使用了錯誤的輸入,該格式SimpleDateFormat應為格式11/09/2021(請注意,月份在日期之前):
String dateFormat = "11/09/2021";
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
否則,您可以在構建時更改日期模式SimpleDateFormat:
String dateFormat = "20211109";
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
Date strtDt = sdf.parse(dateFormat);
String strt = sdf.format(strtDt);
編輯
您可以使用正則運算式模式匹配根據輸入的格式化字串在格式化程式之間切換:
Pattern pattern = Pattern.compile("^\\d{8}$");
SimpleDateFormat sdf;
if (pattern.matcher(input).matches()) {
sdf = new SimpleDateFormat("yyyyMMdd");
} else {
sdf = new SimpleDateFormat("MM/dd/yyyy");
}
Date strtDt = sdf.parse(input);
String strt = sdf.format(strtDt);
您還可以捕獲ParseException嘗試另一種格式決議,但我不建議對您的程式流使用例外。
正如@Ole VV 在他的評論中所建議的那樣,您不應該使用java.text.SimplateDateFormat和java.util.Date類進行日期型別操作和決議,因為這些已經過時并且可能會在此程序中造成很多麻煩。
如果您使用的是 JDK 1.8 及更高版本,則應使用JSR 310 中引入的新日期時間API :
String dateFormat = "20211109";
DateTimeFormatter formatter = DateTimeFormatter.BASIC_ISO_DATE;
// Same as `DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");`
LocalDateTime strtDt = formatter.parse(dateFormat, LocalDateTime::from);
String strt = formatter.format(strtDt);
uj5u.com熱心網友回復:
時間
我強烈建議您使用 java.time,現代 Java 日期和時間 API 來進行日期作業。
通常需要兩個格式化程式將一種格式的字串日期轉換為另一種格式的字串:一個用于描述您獲得的格式,另一個用于所需的格式。在這種情況下,前者是內置的。對于您所需的結果,靜態定義一個格式化程式:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.forLanguageTag("es-PA"));
該做的:
String dateFormat = "20211109";
LocalDate start = LocalDate.parse(dateFormat, DateTimeFormatter.BASIC_ISO_DATE);
String string = start.format(DATE_FORMATTER);
System.out.println(string);
輸出:
11/09/2021
對于格式化,我采用了巴拿馬的內置中等日期格式,因為這是格式符合您要求的語言環境之一。您當然應該使用用戶的語言環境,而不是巴拿馬的語言環境,作為他們將識別為他們自己的輸出格式。通過這種方式,我們省去了撰寫格式模式字串的麻煩,同時代碼非常適合國際化。
您不應該希望從一種字串格式轉換為另一種格式
如果您要問如何將日期從一種字串格式轉換為另一種格式,那么您確實問錯了問題。除了最小的一次性程式外,我們不應該將日期作為字串處理,而應始終將它們存盤在LocalDate物件中。當我們接受字串輸入時,我們進行決議。只有當我們需要給出字串輸出時,我們才格式化回來。
使用格式模式
如果出于某種原因,您的用戶對 Java 的本地化格式不滿意,并且您需要對輸出格式進行更多控制,則可以在問題中嘗試使用格式模式:
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.ROOT);
鏈接
- Oracle 教程:解釋如何使用 java.time 的日期時間。
- 維基百科文章:ISO 8601
- 相關問題:錯誤輸出將日期格式從 YYYYMMDD 轉換為 dd-mm-yyyy
- 相關問題:String to date format java
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355790.html
上一篇:必須在呼叫save()之前手動分配此類的id:com.employeesService.EmployeesService.model.Employee
