Jam*_*unn 5 java legacy jodatime
我有一个独特的情况.我正在研究一个旧的WebLogic服务器上的遗留项目,它(A)不允许任何过去的Java 6,并且(B)使用旧版本的JodaTime(版本1.2,确切地说)污染类加载器.
我正在为之工作的客户端有一个标准开发平台,包括Java 8,以及JodaTime,用于存放在早期Java版本中的项目.因此,我坚持使用这个旧版本的JodaTime(310-Backport将是一个很好的解决方案,但我不允许使用它).
我需要创建一个实用程序方法来检查a 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);
}
Run Code Online (Sandbox Code Playgroud)
感觉有点icky,因为在最新版本的JodaTime中,YearMonthDay类中的所有内容都已被弃用并替换为LocalDate,遗憾的是我无法使用.有没有更好的方法可以做到这一点?此外,我试图DateTime通过将其转换为YearMonthDay...来消除时间...是否有任何"陷阱"我缺少或应该注意到?
另外两个注意事项:我假设我已经对dateTime参数进行了空检查,时区应该不是问题,因为应用程序中的所有时区都是GMT.此外,我被允许使用Apache Commons和Guava库.
由于您确定所有时区都是 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;
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样稍微优化一下:
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;
}
Run Code Online (Sandbox Code Playgroud)
该解决方案将您与 JodaTime 稍微解耦,不会引入其他日期/时间类型。
另一方面,弃用说明YearMonthDay说
使用 LocalDate ,它有更好的内部实现
因此,使用它可能并不完全错误,而且我不会假设您使用它会遇到任何错误。
我建议为该方法编写一组漂亮的(参数化?)单元测试并验证YearMonthDay. 如果它看起来有效,那么就继续它,如果不起作用,那么尝试toString()解决方法。
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |