将java.sql.Date和java.util.Date转换为org.joda.time.LocalDate

ryantage

我正在尝试仔细地清理一些旧的(生产)代码。我想做的一件事是将java.util.DatetoLocalDateto的所有用法转换DateTime

但是,今晚我在工作时注意到一个大障碍。我有以下代码:

ResultSet results = stmt.executeQuery();

Date last = results.getDate("LAST_DELIVERY_DATE");
Date next = results.getDate("NEXT_DELIVERY_DATE");
boolean received;
if (last == null && next == null) {
    received = true; // order is not open
} else if (last == null) {
    received = false;
} else {
    received = true;
}

我转换lastnext到:

LocalDate last = new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));

Netbeans强调了if == null并说:

Unnecessary test for null - the expression is never null

这是有道理的,因为新LocalDate实例不会为空(不能为空new Object())。

但是,在这种情况下,以及在整个程序中的许多情况下,null日期都传达了一些基本信息。在这种情况下,它显示是否已接收(或未接收)订单1)(未平仓),2)。

因此,尝试找到解决方法,我想可以改用以下代码:

LocalDate last = results.getDate("LAST_DELIVERY_DATE") == null? null : new LocalDate(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = results.getDate("NEXT_DELIVERY_DATE") == null? null : new LocalDate(results.getDate("NEXT_DELIVERY_DATE"));

但是,这对我来说似乎很难看?此外,它两次调用了“ ResultSet#getDate()”函数,如果我错了,请纠正我...对数据库进行两次调用,对吗?因此,现在要将我的代码转换为joda-time,我实质上java.sql.Date将从数据库中获取对象所需的时间加倍...

LocalDate last = LocalDate.fromDateFields(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = LocalDate.fromDateFields(results.getDate("NEXT_DELIVERY_DATE"));

也不起作用,因为在获取时会fromDateFields引发一个NullPointerExceptionnull

因此,我的问题是:当程序需要具有空日期和Joda时间时,如何最好地处理空日期我想念什么吗?有没有更简单的方法来实现我的目标?

杰切林

使用三元运算符的代码不能那么精确,因为您需要两次访问数据库。考虑dateutil使用如下方法编写库:

    LocalDate convertToLocalDate(Date date) {
        if(date == null) return null;
        return new LocalDate(date);
    }

IMO以牺牲经常使用的轻量级静态方法为代价来清理此代码是一项很好的交易。

还可以考虑不使用Java。例如,在Javascript中,您可以使用||而不会出现此问题。我还听说Scala是一种很好的语言,可以通过更明确地支持Nullable类型来解决此问题只要您清理旧代码,就可以正确执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Joda LocalDate或java.util.Date转换为LocalDateTime,在开始时间有时间

来自分类Dev

如何将org.joda.time.LocalDateTime转换为java.Util.Calendar?

来自分类Dev

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

来自分类Dev

我如何同时使用org.joda.time.LocalDate和java.time.LocalDate;

来自分类Dev

我如何同时使用org.joda.time.LocalDate和java.time.LocalDate;

来自分类Dev

将LocalDate和LocalTime转换为java.util.date的最佳方法是什么?

来自分类Dev

SQLException:无法使用休眠将java.util.Date强制转换为java.sql.Time

来自分类Dev

转换java.util.Date到LOCALDATE的

来自分类Dev

将 Java.util.Date 转换为 com.datastax.driver.core.LocalDate 错误

来自分类Dev

将String转换为Date时,java.util.Date和java.sql.Date之间存在歧义

来自分类常见问题

如何将java.sql.timestamp转换为LocalDate(java8)java.time?

来自分类常见问题

java.time.LocalDate参数在休眠查询中作为java.util.Date处理

来自分类Dev

jooq转换器:从java.sql.Date到java.time.LocalDate

来自分类Dev

将java.util.Date转换为java.sql.Date会截断时间部分

来自分类Dev

ClassCastException:无法将java.util.Date强制转换为java.sql.Date

来自分类Dev

如何将java.util.date转换为java.sql.date?

来自分类Dev

无法将java.util.Date强制转换为java.sql.Date

来自分类Dev

如何将java.util.Date转换为Java8 java.time.YearMonth

来自分类常见问题

Java8将java.util.Date转换为java.time.ZonedDateTime

来自分类Dev

将Joda time Instant转换为Java time Instant

来自分类Dev

我们如何将com.datastax.driver.core.LocalDate转换为java.util.Date?

来自分类Dev

将java.util.Date转换为什么“ java.time”类型?

来自分类Dev

使用ZoneId.systemDefault()将java.util.Date转换为java.time.LocalDateTime

来自分类Dev

使用ZoneId.systemDefault()将java.util.Date转换为java.time.LocalDateTime

来自分类Dev

怎么把ReadableInstant(Joda Time)转换成Java Date?

来自分类Dev

如何从org.joda.time.DateTime转换为java.time.ZonedDateTime

来自分类Dev

类型不匹配:无法从java.util.Date转换为java.sql.Date

来自分类Dev

差异将java.util.Date和java.time.Instant之间古老的日期时,

来自分类Dev

在LocalDate和sql.Date之间转换

Related 相关文章

  1. 1

    将Joda LocalDate或java.util.Date转换为LocalDateTime,在开始时间有时间

  2. 2

    如何将org.joda.time.LocalDateTime转换为java.Util.Calendar?

  3. 3

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

  4. 4

    我如何同时使用org.joda.time.LocalDate和java.time.LocalDate;

  5. 5

    我如何同时使用org.joda.time.LocalDate和java.time.LocalDate;

  6. 6

    将LocalDate和LocalTime转换为java.util.date的最佳方法是什么?

  7. 7

    SQLException:无法使用休眠将java.util.Date强制转换为java.sql.Time

  8. 8

    转换java.util.Date到LOCALDATE的

  9. 9

    将 Java.util.Date 转换为 com.datastax.driver.core.LocalDate 错误

  10. 10

    将String转换为Date时,java.util.Date和java.sql.Date之间存在歧义

  11. 11

    如何将java.sql.timestamp转换为LocalDate(java8)java.time?

  12. 12

    java.time.LocalDate参数在休眠查询中作为java.util.Date处理

  13. 13

    jooq转换器:从java.sql.Date到java.time.LocalDate

  14. 14

    将java.util.Date转换为java.sql.Date会截断时间部分

  15. 15

    ClassCastException:无法将java.util.Date强制转换为java.sql.Date

  16. 16

    如何将java.util.date转换为java.sql.date?

  17. 17

    无法将java.util.Date强制转换为java.sql.Date

  18. 18

    如何将java.util.Date转换为Java8 java.time.YearMonth

  19. 19

    Java8将java.util.Date转换为java.time.ZonedDateTime

  20. 20

    将Joda time Instant转换为Java time Instant

  21. 21

    我们如何将com.datastax.driver.core.LocalDate转换为java.util.Date?

  22. 22

    将java.util.Date转换为什么“ java.time”类型?

  23. 23

    使用ZoneId.systemDefault()将java.util.Date转换为java.time.LocalDateTime

  24. 24

    使用ZoneId.systemDefault()将java.util.Date转换为java.time.LocalDateTime

  25. 25

    怎么把ReadableInstant(Joda Time)转换成Java Date?

  26. 26

    如何从org.joda.time.DateTime转换为java.time.ZonedDateTime

  27. 27

    类型不匹配:无法从java.util.Date转换为java.sql.Date

  28. 28

    差异将java.util.Date和java.time.Instant之间古老的日期时,

  29. 29

    在LocalDate和sql.Date之间转换

热门标签

归档