如何将 LocalDate 转换为 SQL Date Java?

Posted

技术标签:

【中文标题】如何将 LocalDate 转换为 SQL Date Java?【英文标题】:How to convert LocalDate to SQL Date Java? 【发布时间】:2015-05-23 23:28:47 【问题描述】:

如何将 LocalDate 转换为 java.sql.Date

尝试:

Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(new Date(date));

这失败了(无法编译),我只能找到 Joda 时间的东西。

我正在使用 Java 8

【问题讨论】:

Convert between LocalDate and sql.Date 的可能重复项 @assylias 链接问题的答案比这里给出的更好吗?另一个问题应作为此问题的副本关闭,反之亦然。 @SecondRikudo 副本显示了如何从 LocalDate 转换为 Date ,反之亦然,因此看起来更通用。 【参考方案1】:

答案很简单;

import java.sql.Date;
...
LocalDate locald = LocalDate.of(1967, 06, 22);
Date date = Date.valueOf(locald); // Magic happens here!
r.setDateOfBirth(date);

如果你想反过来转换它,你可以这样做:

Date date = r.getDate();
LocalDate localD = date.toLocalDate();

r 是您在 JOOQ 中使用的记录,.getDate() 是从记录中取出日期的方法;假设您有一个名为 date_of_birth 的日期列,那么您的 get 方法应称为 getDateOfBirth()

【讨论】:

根据 java.time.* 作者:***.com/questions/33066904/…,这是一个“可怕的 hack” 您正在回答有关 java.util.Date 的问题 不是 java.sql.Date 是关于此问题的。【参考方案2】:

如果你想要当前日期:

Date date = Date.valueOf(LocalDate.now());

如果你想要一个具体的日期:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));

【讨论】:

如果你想要当前时刻,如果你想要一个特定的日期,这可能会更快,当你处理某人的出生日期时,这可能根本不起作用。 是的,就是插入当前日期,例如当你创建对象并想保留创建日期时。 这很重要,因为最初的问题是关于创建一个特定的日期。这是所有复制粘贴的注释。如果您想“更快”地做到这一点,您可以使用Date date = Date.valueOf(LocalDate.of(1967, 06, 22)); 将正确答案连线。【参考方案3】:

您是否尝试过使用 LocalDate 的 toDate() 方法?

如:

Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(date.toDate());

一般来说,最好指定如何失败,而不是仅仅说“失败”。

【讨论】:

说实话,我只是发布问题来发布我的答案,以便您在google时可以找到它。我必须自己想办法,因为古德尔没有这个问题或答案。 好吧,现在你有两个答案,越多越好。我不认为回答你自己的帖子有什么问题。 我希望它将来能帮助到我的位置。 OP 写道“[…] 我能找到的只有 Joda 时间的东西。我正在取消 Java 8”。但是,您的答案只是更多 Joda 的东西,而不是 Java 8 的答案。 LocalDate.toDate() 仅存在于 Joda 版本的 LocalDate 中,不存在于标准库版本中。

以上是关于如何将 LocalDate 转换为 SQL Date Java?的主要内容,如果未能解决你的问题,请参考以下文章

将通过 JDBC 检索到的 java.sql.Date 值转换为 java.time.LocalDate? [复制]

如何将 Joda Localdate 转换为 Joda DateTime?

如何从 Instant 转换为 LocalDate

如何将 Javascript 日期转换为 Spring @RequestParam 的 LocalDate?

如何在不使用 DateTimeFormatter 的情况下将字符串转换为 LocalDate [重复]

在 LocalDate 和 sql.Date 之间转换 [重复]