相关疑难解决方法(0)

如何将LocalDate转换为SQL Date Java?

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

尝试:

Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(new Date(date));
Run Code Online (Sandbox Code Playgroud)

这失败了(不会编译),我能找到的就是Joda时间的东西.

我正在使用Java 8

java converter sqldatetime java-8 java-time

83
推荐指数
1
解决办法
7万
查看次数

Java 8 java.time:在Instant vs LocalDateTime中添加TemporalUnit

我正在使用Java 8中的新java.time包.我有一个遗留数据库,它给了我java.util.Date,我转换为Instant.

我想要做的是添加一段基于另一个数据库标志的时间.我可以添加几天,几周,几个月或几年.我不想关心我要添加的内容,我希望将来能够添加更多选项.

我的第一个想法是Instant.plus(),但这给了我一个UnsupportedTemporalTypeException超过一天的价值.Instant显然不支持大单位时间的操作.好的,无论如何LocalDateTime.

所以这给了我这个代码:

private Date adjustDate(Date myDate, TemporalUnit unit){
    Instant instant = myDate.toInstant();
    LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
    dateTime = dateTime.plus(1, unit);
    Instant updatedInstant = dateTime.atZone(ZoneId.systemDefault()).toInstant();
    return new Date(dueInstant.toEpochMilli());
}
Run Code Online (Sandbox Code Playgroud)

现在,这是我第一次使用新的时间API,所以我可能在这里错过了一些东西.但是我必须离开这似乎很笨重:

Date --> Instant --> LocalDateTime --> do stuff--> Instant --> Date.
Run Code Online (Sandbox Code Playgroud)

即使我不必使用Date部分,我仍然认为它有点尴尬.所以我的问题是,我这样做完全错了,最好的办法是什么?


编辑:扩展评论中的讨论.

我想我现在更好地了解了LocalDateTime和Instant如何使用java.util.Date和java.sql.Timestamp.感谢大家.

现在,更实际的考虑.假设用户向我发送了他们在世界任何地方的日期,任意时区.他们发给我2014-04-16T13:00:00我可以解析的LocalDateTime.然后我将它直接转换为java.sql.Timestamp并在我的数据库中保留.

现在,我没有做任何其他事情,我从我的数据库中提取我的java.sql.timestamp,转换为LocalDateTime使用timestamp.toLocalDateTime().都好.然后我使用ISO_DATE_TIME格式将此值返回给我的用户.结果是2014-04-16T09:00:00.

我认为这种差异是因为某种类型的隐式转换到/来自UTC.我认为我的默认时区可能会应用于该值(EDT,UTC-4),这可以解释为什么数字关闭4小时.

新问题.从本地时间到UTC的隐式转换在哪里?保留时区的更好方法是什么.我不应该直接从当地时间作为字符串(2014-04-16T13:00:00)来LocalDateTime?我应该期待用户输入的时区吗?

java java-8 java-time

25
推荐指数
1
解决办法
3万
查看次数

标签 统计

java ×2

java-8 ×2

java-time ×2

converter ×1

sqldatetime ×1