[英]JXDatePicker using SimpleDateFormat to format dd.MM.yy to dd.MM.yyyy with current century
[英]SimpleDateFormat fails to reject input missing century on the year of the input, despite “yyyy” in the formatting pattern
我有一個模式為yyyy-Md"
的SimpleDateFormat,並且具有以下情形:
String str = "02-03-04";
SimpleDateFormat f = new SimpleDateFormat("yyyy-M-d");
f.setLenient(false);
System.out.println(f.parse(str));
輸出為Sat Mar 04 00:00:00 EST 2
我的目標是只捕獲格式為2004-02-03的日期,而忽略02-03-04。 我認為格式中的yyyy需要4位數字的年份,但顯然不是這樣。 誰能解釋為什么這沒有引發解析異常? 我想要...
如您所料,使用java.time時 ,使用該格式模式的輸入失敗。
LocalDate
.parse(
"02-03-04" ,
DateTimeFormatter.ofPattern ( "uuuu-M-d" )
)
…引發java.time.format.DateTimeParseException
現在,您所使用的類已由 JSR 310中定義並內置於Java 8及更高版本中的現代java.time類所取代。
LocalDate
類表示僅包含日期的值,沒有日期, 時間段或offset-from-UTC 。
根據要求定義自定義格式設置模式。 使用DateTimeFormatter
類。
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "uuuu-M-d" );
嘗試解析您的輸入。
String input = "02-03-04";
LocalDate localDate = LocalDate.parse ( input , f );
我們遇到了DateTimeParseException
,在缺少輸入年份的世紀失敗。 如您所料。
線程“主”中的異常java.time.format.DateTimeParseException:無法在索引0處解析文本“ 02-03-04”
java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊的舊式日期時間類,例如java.util.Date
, Calendar
和SimpleDateFormat
。
要了解更多信息,請參見Oracle教程 。 並在Stack Overflow中搜索許多示例和說明。 規格為JSR 310 。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
您可以直接與數據庫交換java.time對象。 使用與JDBC 4.2或更高版本兼容的JDBC驅動程序 。 不需要字符串,不需要java.sql.*
類。
在哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目為將來可能在java.time中添加內容提供了一個試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.