如何将LocalDate转换为SQL Date Java?


96

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

尝试:

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

这失败了(不会编译),我只能找到乔达时间的东西。

我正在使用Java 8



2
@assylias链接问题的答案比这里给出的答案好吗?另一个问题应该作为此问题的重复来解决,反之亦然。
马达拉的幽灵2015年

1
@SecondRikudo重复项显示了如何从LocalDate转换为Date,反之亦然,因此似乎更通用。
assylias 2015年

Answers:


169

答案很简单;

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()


4
这是一个“可怕的黑客”与java.time根据*作者:stackoverflow.com/questions/33066904/...
Dherik

14
您正在回答有关“ 本问题”的“ java.util.Date 非” java.sql.Date问题。
Gemtastic

0

如果您想要当前日期:

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

如果要指定日期:

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

1
这仅在需要当前时刻,需要特定日期时才更快,例如在处理某人的出生日期时可能根本不起作用。
Gemtastic

是的,这是插入当前日期,例如,当您创建对象并希望保留创建日期时。
理查德

需要注意的重要一点是,原始问题全都与创建特定日期有关。这是所有复制粘贴的注释。Date date = Date.valueOf(LocalDate.of(1967, 06, 22));如果您想“更快”地做,则可以单行正确答案。
Gemtastic

-1

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

如:

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

在一般情况下,这是一个好主意,指定如何失败,而不是仅仅说“失败”。


老实说,我只是发布问题来发布我的答案,以便您在Google上可以找到它。我必须自己弄清楚它,因为古德没有这个问题或答案。
Gemtastic 2015年

6
好吧,那么您现在有了两个答案,那就更好了。我认为回答自己的帖子没有任何错误。
juhist

我希望它将来能对我这个地方的人有所帮助。
Gemtastic 2015年

2
OP写道:“ […]我只能找到Joda时间的东西。我正在取消Java 8的演唱。但是,您的答案只是更多有关Joda的内容,而不是Java 8答案。
Michael Piefel '16

1
LocalDate.toDate()仅存在于Joda版本的LocalDate中,而不存在于标准库版本中。
罗德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.