tl;博士
Year.of( 2018 )
.atDay( 308 )
2018-11-04
java.time
现代方法使用 Java 8 及更高版本中内置的 java.time 类。
LocalDate 类表示没有时间和时区的仅日期值。
Year 类代表,嗯,一年。并包括一个 atDay( dayOfYear ) 方法,您可以在其中度过一年中的第一个日子。
int dayOfYear = 308 ;
Year y = Year.of( 2018 ) ;
LocalDate ld = y.atDay( dayOfYear ) ;
转储到控制台。
System.out.println( "dayOfYear: " + dayOfYear + " at year: " + y + " = " + ld ) ;
看到这个code run live at IdeOne.com。
dayOfYear:308 年:2018 = 2018-11-04
至于生成特定格式的字符串,请搜索 DateTimeFormatter 类,因为该类已经介绍过很多次了。
顺便说一句,您的特定格式根本不是“SQL 格式”。无论如何,您应该与数据库交换对象,而不仅仅是字符串。使用与 JDBC 4.2 或更高版本兼容的驱动程序时,请查看 JDBC 中的 getObject 和 setObject 方法。
数据库
对于 SQL 标准类型 DATE 的数据库列的 SQL 访问,请使用 JDBC 4.2 或更高版本直接传递 LocalDate 对象。不要仅使用字符串来交换日期时间值。
myPreparedStatement.setObject( … , ld ) ;
检索。
LocalDate ld = myResultSet.getDate( … , LocalDate.class ) ;
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。