将一年中的某一天转换为 Java 中的日期

Asj*_*jon 2 java sql date

我一年中有几天。(今天的数字是 308。)我想将此数字转换为 SQL 格式 ( YYYY/MM/DD)的日期。我可以用java做吗?

先感谢您。

Bas*_*que 6

tl;博士

Year.of( 2018 )
    .atDay( 308 )
Run Code Online (Sandbox Code Playgroud)

2018-11-04

时间

现代方法使用 Java 8 及更高版本中内置的 java.time 类。

LocalDate级表示没有时间一天和不同时区的日期,唯一的价值。

这个Year班级代表了一年。并包括一种atDay( dayOfYear )方法,您可以在其中通过一年中的序数日。

int dayOfYear = 308 ;
Year y = Year.of( 2018 ) ;
LocalDate ld = y.atDay( dayOfYear ) ;
Run Code Online (Sandbox Code Playgroud)

转储到控制台。

System.out.println( "dayOfYear: " + dayOfYear + " at year: " + y + " = " + ld ) ;
Run Code Online (Sandbox Code Playgroud)

查看此代码在 IdeOne.com 上实时运行

dayOfYear:308 在年份:2018 = 2018-11-04

至于生成特定格式的字符串,搜索DateTimeFormatter类,因为已经多次覆盖。

顺便说一下,您的特定格式根本不是“SQL 格式”。无论如何,您应该与数据库交换对象,而不仅仅是字符串。使用符合 JDBC 4.2 或更高版本的驱动程序时,请查看JDBC中的getObjectsetObject方法。

数据库

对于 SQL 标准类型的数据库列的 SQL 访问DATE,请使用 JDBC 4.2 或更高版本LocalDate直接传递对象。不要仅使用字符串来交换日期时间值。

myPreparedStatement.setObject( … , ld ) ;
Run Code Online (Sandbox Code Playgroud)

恢复。

LocalDate ld = myResultSet.getDate( … , LocalDate.class ) ;
Run Code Online (Sandbox Code Playgroud)

Java(现代和传统)和标准 SQL 中的日期时间类型表。


关于 java.time

java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

现在处于维护模式Joda-Time项目建议迁移到java.time类。

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310

从哪里获得 java.time 类?

ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如IntervalYearWeekYearQuarter,和更多