【问题标题】:Convert day of the year to a date in java将一年中的某一天转换为java中的日期
【发布时间】:2016-02-04 18:31:05
【问题描述】:

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

提前谢谢你。

【问题讨论】:

  • SimpleDateFormat 例如,格式为D,表示一年中的某一天。您可以通过提供号码简单地将其解析为Date
  • 根本不存在 SQL 格式或日期格式之类的东西。日期在所有数据库中都存储为 二进制 值。仅当您将日期转换为字符串或将日期存储为字符串而不是实际的日期类型值时,格式才适用
  • ANSI SQL 日期格式为 YYYY-MM-DD。但是你想在 Java 中实现它吗?
  • @Asjon 如果您的数据库字段是日期类型的,则没有理由将日期转换为字符串。只需计算当前的Date 并将其存储到数据库中作为日期
  • @jarlh 不,它没有。您所说的是 ISO 8601 日期文字,而不是日期格式。日期值根本不应该作为字符串传递。所有数据访问库都允许您将强类型参数传递给参数化查询

标签: java sql date


【解决方案1】:

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 中的 getObjectsetObject 方法。

数据库

对于 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.DateCalendarSimpleDateFormat

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

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

从哪里获得 java.time 类?

ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

【讨论】:

  • Basil,参考文献是黄金。谢谢。
【解决方案2】:
int dayOfYear = 112;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_YEAR, dayOfYear);
SimpleDateFormat sdf = new SimpleDateFormat("YYYY/MM/dd");
System.out.println("Day of year " + dayOfYear + " = " + sdf.format(calendar.getTime()));

希望上面的 sn-ps 对你有帮助

【讨论】:

猜你喜欢
  • 2014-08-03
  • 2021-02-06
  • 2021-03-07
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多