我有一年中的几天。 (今天的天数是 308。)我想将这个数字转换为 SQL 格式的日期 (YYYY/MM/DD
)。我可以用 Java 实现吗?
提前谢谢你。
最佳答案
tl;dr
Year.of( 2018 )
.atDay( 308 )
2018-11-04
java.time
现代方法使用 Java 8 及更高版本中内置的 java.time 类。
LocalDate
类表示没有时间和时区的纯日期值。
Year
类(class)代表一年。并包括 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 at year: 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 类?
- > Java SE 8 , Java SE 9 , 然后
- 内置。
- 带有捆绑实现的标准 Java API 的一部分。
- Java 9 添加了一些次要功能和修复。
- > Java SE 6和 Java SE 7
- 许多 java.time 功能在 ThreeTen-Backport 中被反向移植到 Java 6 和 7 .
- > Android
- ThreeTenABP项目专门针对 Android 改编ThreeTen-Backport(如上所述)。
- 参见 How to use ThreeTenABP… .
ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
, 和 more .
关于java - 将一年中的某一天转换为 Java 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33518874/