【发布时间】:2020-11-13 12:02:54
【问题描述】:
我正在尝试比较两个日期。 日期作为字符串从数据库导入,可能为空,也可能不为空
这是我的代码
private String compareDates(String date1, String date2)
{
String earliestDate = null;
// date2 is null and date1 is null
// earliest = “not seen yet”
if (date2 == null && date1 == null)
{
earliestDate = "not seen yet";
}
// date2 is null and date1 is not null
// earliest = date1
if (date2 == null && date1 != null)
{
earliestDate = date1;
}
// date2 is not null and date1 is null
// earliest = date2
if (date2 != null && date1 == null)
{
earliestDate = date2;
}
// date2 is not null and date1 is not null
// compare dates
if (date2 != null && date1 != null)
{
LocalDate LDdate1 = LocalDate.parse(date1);
LocalDate LDdate2 = LocalDate.parse(date2);
if (LDdate1.isBefore(LDdate2) || LDdate1.isEqual(LDdate2))
{
earliestDate = LDdate1.toString();
}
else
{
earliestDate = LDdate2.toString();
}
}
return earliestDate;
}
此代码为我提供了正确的输出,即最早的日期,或者如果两个日期都为空,则为“尚未看到”,但我想知道是否有更好/更有效的处理方式。
我认为使用 switch 语句是一种选择,但只是换一种方式会更好吗?
数据库中的数据仅包含大约 200 个日期,因此它不会处理大量数据,只是我对编写更好的代码感兴趣
【问题讨论】:
-
什么是“正确的输出”?
-
不使用
earliestDate变量,您可以只使用return来确定您想要返回的值。然后一些后续的 if 条件就变得不必要了。 -
一些想法:您可以将除第一个
if语句之外的所有语句更改为else if,因为应该只输入其中一个语句。如果您这样做了,您可以将最后一个if (date2 != null && date1 != null)更改为简单的else,因为您之前的所有案例都已经处理了null的日期之一。您可以删除String earliestDate局部变量并直接返回(例如:return date1而不是easliestDate = date1。 -
@sp00m 如果两个日期都为空,则正确的输出是最早的日期或“尚未见过”的日期。我已经相应地编辑了问题。
标签: java algorithm date-comparison