我正在尝试仔细细致地清理我的一些旧(生产)代码。我想做的一件事是将我所有的java.util.Date
toLocalDate
和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()
)。
但是,在这种情况下以及在我的程序中的许多情况下,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
抛出 a 。NullPointerException
null
所以,我的问题是:当你的程序需要有空日期和joda -time时,你如何最好地处理空日期?我错过了什么吗?有没有更简单的方法来完成我所追求的?