如何将 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?
如何将 Javascript 日期转换为 Spring @RequestParam 的 LocalDate?