首页 > 解决方案 > ISO 8601 日期格式字符串到 Java 中的 Date 对象

问题描述

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

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

标签: javadate

解决方案


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

要使用 JDBC 4.2 或更高版本的驱动程序或现代 JPA 实现(如 Hibernate 5)存储到 SQL 数据库中,您无需使用Date对象(无论您的意思是java.util.Date还是java.sql.Date)。我建议您改用 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()

链接


推荐阅读