java - ISO 8601 日期格式字符串到 Java 中的 Date 对象

标签 java date

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

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

最佳答案

是的,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 格式:

Date of birth is 1962-11-27

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

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

这将为您提供一个 LocalDate ,该 LocalDate 与我们之前的相同并且没有区别。

使用 JDBC 保存到数据库中:

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

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

链接

关于java - ISO 8601 日期格式字符串到 Java 中的 Date 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61047661/

相关文章:

Java NIO UDP 多播 - 丢弃数据包

java - "Error: Unresolved compilation problems"与 Wowza 模块

ios - 在 Swift 中将日期转换为 "/Date(631148400000+0100)/"字符串

java - 如何在适配器中启动 Activity?

java - 多线程字符串处理因#threads 而爆炸

mysql - 从MySQL表中获取两天的数据

sql-server - 检查第一行日期是否在下一行日期之间

date - Ruby 将 DD/MM/YYYY 字符串转换为 YYYY,MM,DD

javascript - 如何使用 JQuery DatePicker 返回 YYYYMMDD 格式的日期?

java - Firebase Java Admin SDK 线程安全吗?