gpt4 book ai didi

java - 从 LocalDate 到 java.sql.Date 的正确方法是什么

转载 作者:搜寻专家 更新时间:2023-10-30 20:01:37 24 4
gpt4 key购买 nike

我有一个 LocalDate,我正在尝试将其转换为 java.sql.Date 以将其存储在数据库的日期字段中。我的问题是,当我将它转换为 java.sql.Date 时,由于我正在运行的机器处于 EST 状态,它会延迟一天。我将 Joda.DateTime 设置为 UTC,并通过使用 millis 构造函数创建 java.sql.Date。我包括了调试监视的输出,这样您就可以看到不同的值是什么:

item.getDate().toDateTimeAtStartOfDay() = {org.joda.time.DateTime@6079}"2013-09-25T00:00:00.000Z"
item.getDate().toDateTimeAtStartOfDay().getMillis() = 1380067200000
new java.sql.Date(item.getDate().toDateTimeAtStartOfDay().getMillis()) = {java.sql.Date@6082}"2013-09-24"
item.getDate().getLocalMillis() = 1380067200000
new java.sql.Date(item.getDate().getLocalMillis()) = {java.sql.Date@6083}"2013-09-24"
new java.util.Date(item.getDate().getLocalMillis()) = {java.util.Date@6103}"Tue Sep 24 20:00:00 EDT 2013"

java.util.Date 创建我假设这是因为我正在测试的机器是 EST,而 LocalDate 是 UTC,但我不确定是什么解决这个问题的正确方法是。我意识到我可以获得本地时区并将其添加到毫秒,但这似乎是一个 hacky 修复。有没有一种我只是想念的正确方法来做到这一点?


用毫秒更新 java.util.Date

new java.util.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000
item.getDate().toDateTimeAtStartOfDay().getMillis() = 1380153600000
item.getDate() = {org.joda.time.LocalDate@5812}"2013-09-26"
new java.sql.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000
new java.util.Date(item.getDate().getLocalMillis()) = {java.util.Date@5842}"Wed Sep 25 20:00:00 EDT 2013"
new java.util.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000

最佳答案

正确的转换是:

    public static final DateTimeZone jodaTzUTC = DateTimeZone.forID("UTC");

// from java.sql.Date to LocalDate:
public static LocalDate dateToLocalDate(java.sql.Date d) {
if(d==null) return null;
return new LocalDate(d.getTime(), jodaTzUTC);
}

// from LocalDate to java.sql.Date:
public static java.sql.Date localdateToDate(LocalDate ld) {
if(ld==null) return null;
return new java.sql.Date(
ld.toDateTimeAtStartOfDay(jodaTzUTC).getMillis());
}

我在我的 DAO 辅助程序逻辑中使用它。在 JDBC 中你应该这样做

 public static final Calendar calendarUTC = Calendar.getInstance(
TimeZone.getTimeZone("UTC"));

d = rs.getDate(i, calendarUTC);

二传手也一样。

关于java - 从 LocalDate 到 java.sql.Date 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com