【问题标题】:ISO 8601 date format string to Date object in JavaISO 8601 日期格式字符串到 Java 中的 Date 对象
【发布时间】:2023-03-25 11:28:01
【问题描述】:

我尝试仅搜索不同格式的 ISO 8601 日期的答案,但无法识别包含这些详细信息的答案或材料

我正在尝试接收 ISO 8601 日期格式(日期仅作为其出生日期)字符串并将其转换为日期对象,然后以 dB 为单位。是 yyyy-MM-dd 唯一的日期格式,被视为 ISO 8601 日期格式。如果是这样,我可以相应地处理这个问题,但是是否有多种日期 ISO 8601 日期格式,如果有,请指导什么是解析给定字符串并在 Java 中转换为日期对象的最佳方法

【问题讨论】:

标签: java date


【解决方案1】:

是的,yyyy-MM-dd 是 ISO 8601 格式的日期,没有时间和时区。

要使用 JDBC 4.2 或更高版本的驱动程序或现代 JPA 实现(例如 Hibernate 5)存储到 SQL 数据库中,您无需使用 Date 对象(无论您的意思是 java.util.Date 还是 @ 987654330@)。我建议您改用 java.time,这是现代 Java 日期和时间 API。用于没有时间的日期的类是LocalDate。并且您可以将一个存储到您的数据库中而无需任何转换。

LocalDate 默认解析 ISO 8601 格式,即没有任何显式格式化程序:

    String receivedString = "1962-11-27";
    LocalDate dateOfBirth = LocalDate.parse(receivedString);
    System.out.println("Date of birth is " + dateOfBirth);

LocalDate 在我们打印时也会返回 ISO 8601 格式:

出生日期是 1962-11-27

不过,我还没有给你完整的故事。 yyyy-MM-dd 是迄今为止最常用的扩展 格式。还有一种基本格式,因为它省略了连字符,所以更紧凑:yyyyMMdd。我建议您坚持以扩展格式获取日期字符串。如果你不能这样做,你将不得不指定一个格式化程序来解析:

    String receivedString = "19621127";
    LocalDate dateOfBirth = LocalDate.parse(
            receivedString, DateTimeFormatter.BASIC_ISO_DATE);

这会给你一个LocalDate,与我们之前的相同且无法区分。

使用 JDBC 保存到数据库中:

    PreparedStatement pStmt
            = yourDatabaseConnection.prepareStatement(
                    "insert into your_table (date_of_birth) values (?);");
    pStmt.setObject(1, dateOfBirth);
    int insertedRows = pStmt.executeUpdate();

注意使用setObject(),而不是setDate()

链接

【讨论】:

  • 非常感谢 Ole 的投入和材料!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2018-06-26
  • 2015-08-10
  • 1970-01-01
  • 2018-02-22
  • 2021-01-17
相关资源
最近更新 更多