tl;dr
java.time.LocalDate.parse( "2021-02-29" )
…
catch ( DateTimeParseException e ) // Thrown for invalid inputs
java.time
您正在使用terrible几年前被取代的日期时间类java.timeJSR 310 中定义的类。
默认情况下,java.time.LocalDate
类拒绝解析无效输入。解析异常的陷阱。
try {
LocalDate ld = LocalDate.parse( "2021-02-29" ) ;
System.out.println( ld ) ;
} catch ( DateTimeParseException e ) {
// … handle invalid input
System.out.println( "Faulty input" ) ;
}
看到这个代码在 IdeOne.com 上实时运行 https://ideone.com/oxmcXg.
About java.time
The java.time https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html框架内置于 Java 8 及更高版本中。这些课程取代了麻烦的旧课程legacy https://en.wikipedia.org/wiki/Legacy_system日期时间类,例如java.util.Date https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Date.html, Calendar https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Calendar.html, & SimpleDateFormat https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/SimpleDateFormat.html.
要了解更多信息,请参阅甲骨文教程 http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310 https://jcp.org/en/jsr/detail?id=310.
The 乔达时间 http://www.joda.org/joda-time/项目,现在在维护模式 https://en.wikipedia.org/wiki/Maintenance_mode,建议迁移到java.time https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/package-summary.html类。
您可以交换java.time对象直接与您的数据库。用一个JDBC驱动程序 https://en.wikipedia.org/wiki/JDBC_driver符合JDBC 4.2 http://openjdk.java.net/jeps/170或稍后。不需要字符串,不需要java.sql.*
类。 Hibernate 5 和 JPA 2.2 支持java.time.
从哪里获取 java.time 类?
-
Java SE 8 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_8, Java SE 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9, Java SE 10 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_10, Java SE 11 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_11, and later - Part of the standard Java API with a bundled implementation.
-
Java 9 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_9带来了一些小功能和修复。
-
Java SE 6 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_6 and Java SE 7 https://en.wikipedia.org/wiki/Java_version_history#Java_SE_7
- 大部分的java.time功能向后移植到 Java 6 和 7三十后端口 http://www.threeten.org/threetenbp/.
-
Android https://en.wikipedia.org/wiki/Android_(operating_system)
- 更高版本的 Android (26+) 捆绑实现java.time类。
- For earlier Android (<26), the process of API desugaring https://developer.android.com/studio/write/java8-support#library-desugaring brings a subset of the java.time https://developer.android.com/studio/write/java8-support-table functionality not originally built into Android.
- 如果脱糖不能提供您所需要的,三十ABP https://github.com/JakeWharton/ThreeTenABP项目适应三十后端口 http://www.threeten.org/threetenbp/(如上所述)到 Android。看如何使用 ThreeTenABP... http://stackoverflow.com/q/38922754/642706.