将 java.sql.Date & java.util.Date 转换为 org.joda.time.LocalDate
我正在尝试仔细细致地清理一些较旧的(生产)代码。我试图做的一件事是将我的所有用法转换为 和 。java.util.Date
LocalDate
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;
}
我转换并:last
next
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()
但是,在这种情况下,在我的程序中,在许多情况下,日期传达了一些基本信息。在这种情况下,它显示订单1)是否打开(或未打开),2)是否已收到(或未收到)。null
因此,为了找到解决它的方法,我想我可以使用以下代码:
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时间,我基本上将从数据库获取对象所需的时间增加了一倍......java.sql.Date
LocalDate last = LocalDate.fromDateFields(results.getDate("LAST_DELIVERY_DATE"));
LocalDate next = LocalDate.fromDateFields(results.getDate("NEXT_DELIVERY_DATE"));
也不起作用,因为当它获得值时会抛出 a。fromDateFields
NullPointerException
null
所以,我的问题是:当你的程序需要有空日期和joda时间时,你如何处理空日期?我错过了什么吗?有没有更简单的方法来完成我所追求的目标?