java - 使用旧版本的 JodaTime 检查 DateTime 是否在未来

标签 java jodatime legacy

我有一个独特的情况。我正在处理旧 WebLogic 服务器上的遗留项目,该服务器 (A) 不允许 Java 6 之后的任何内容,并且 (B) 使用旧版本的 JodaTime(准确地说是 1.2 版)污染类加载器。

我工作的客户有一个标准开发平台,其中包括 Java 8 和 JodaTime,适用于卡在早期 Java 版本中的项目。因此,我一直在使用这个旧版本的 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);
}

感觉有点恶心,因为在最近版本的 JodaTime 中,YearMonthDay 类中的所有内容都已被弃用并替换为 LocalDate,遗憾的是我不能使用它.有没有更好的方法可以做到这一点?另外,我试图通过将 DateTime 转换为 YearMonthDay 来去除时间...是否有任何我遗漏或应该注意的“陷阱”的?

一些额外的注意事项:我假设我已经对 dateTime 参数进行了空检查,并且时区不应该成为问题,因为应用程序中的所有时区都是格林威治标准时间。此外,我被允许使用 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;
}

你可以像这样稍微优化一下:

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 的弃用说明说

Use LocalDate which has a much better internal implementation

所以使用它可能并不完全是错误,我不认为您在使用它时会遇到任何错误。

我建议为该方法编写一组不错的(parameterized?)单元测试并验证 YearMonthDay 的行为。如果它似乎有效,则继续使用它,如果无效,则尝试使用 toString() 解决方法。

关于java - 使用旧版本的 JodaTime 检查 DateTime 是否在未来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33619808/

相关文章:

java - 使用 JodaTime 添加月份?

java - 将字符串转换为位数组

java.nio.charset.MalformedInputException : Input length

java - 如何使用 JAXB/XJC 将 XML 文件转换为对象?

c# - 使用 NHibernate 将多列映射到数组

ios - Xcode 4.2上的旧版支持

python - python 3.3 与 fortran 77 相比的文件处理速度

java - 从Webview获取html字符串并存储为html文件

java - 带有适当数字后缀的 Joda DateTimeFormat

java - 字符串到 LocalDate 的 Joda 时间解析不正确