我有一个独特的情况。我正在处理旧WebLogic服务器上的遗留项目,(A)不允许任何过去的Java 6,并且(B)使用旧版本的JodaTime污染类加载器(确切地说是版本1.2)
我工作的客户有一个包含Java 8的标准开发平台,以及用于早期Java版本的项目的JodaTime。因此,我坚持使用这个旧版本的JodaTime(310-Backport将是一个很好的解决方案,但我不允许使用它。)
我需要创建一个实用程序方法来检查DateTime
是否在今天之后(无论时间如何)。 JodaTime 1.2没有LocalDate
,或者像now()
那样方便的静态工厂方法,所以我想出了这个:
public static boolean isAfterToday(DateTime dateTime) {
YearMonthDay date = new YearMonthDay(dateTime);
YearMonthDay today = new YearMonthDay();
return date.isAfter(today);
}
感觉有点icky,因为在JodaTime的更新版本中,YearMonthDay
类中的所有内容都已被弃用并替换为LocalDate
,遗憾的是我无法使用它。有没有更好的方法可以做到这一点?另外,我试图通过将其转换为DateTime
来剥离YearMonthDay
的时间......是否有任何"陷阱"我错过了或者应该知道吗?
补充说明:我假设我已经检查了dateTime
参数,并且时区不应该是一个问题,因为所有时区都在申请是GMT。此外,我 am 允许使用Apache Commons和Guava库。
答案 0 :(得分:1)
由于您确定所有时区都是GMT,因此最简单的实施方式是:
public static boolean isAfterToday(DateTime dateTime) {
String dateTimeStr = dateTime.toString("yyyy-MM-dd");
String nowStr = new DateTime().toString("yyyy-MM-dd");
return dateTimeStr.compareTo(nowStr) > 0;
}
您可以像这样稍微优化一下:
private static final DateTimeFormat yearMonthDay = DateTimeFormat.forPattern("yyyy-MM-dd");
public static boolean isAfterToday(DateTime dateTime) {
String dateTimeStr = yearMonthDay.print(dateTime);
String nowStr = yearMonthDay.print(new DateTime());
return dateTimeStr.compareTo(nowStr) > 0;
}
该解决方案与JodaTime之间的区别在于它没有引入其他日期/时间类型。
另一方面,关于YearMonthDay
的弃用说明
使用具有更好内部实现的LocalDate
所以它可能不是错误使用它,我不会认为你使用它会遇到任何错误。
我建议为该方法编写一个很好的(parameterized?)单元测试集并验证YearMonthDay
的行为。如果它似乎有效,那么请使用它,如果没有,请尝试toString()
解决方法。