【问题标题】:Make a date range in Joda Time without the year?在没有年份的 Joda Time 中创建日期范围?
【发布时间】:2016-07-29 12:58:33
【问题描述】:

是否可以创建一个类似于 Joda Time 的 Interval 类的范围对象,您可以在其中设置开始和结束日期值但不包括年份?例如,如果日期在 8 月 1 日和 12 月 1 日之间,我想在我的代码中做一些事情,无论年份如何。

【问题讨论】:

  • 当然可以。一旦您决定了 API 的外观,这应该相当容易。你试过什么吗?你的问题到底是什么?
  • @JimGarrison 是的,我尝试过使用 LocalDate 类和 Interval 类,但它们需要一个年份参数。我将检查给定的本地日期是否在该范围内,但如果设置了年份值,它可能不起作用,因为年份可能不同。
  • @JimGarrison 我在问如何在 Joda Time 中做到这一点。是否有一个类或某些功能可以让我在不涉及年份的情况下设置一个范围。我在 SO 或其解决此问题的文档中找不到任何内容。
  • 当一个范围包括二月和三月之间的边界时,您必须确定您的意思。是 28 天还是 29 天?

标签: java jodatime


【解决方案1】:

Joda-Time 提供了一个实现ReadablePartialMonthDay 类型(有关更多类型的部分时间,请参见实现类列表)。您可以将其与Guava's Range 类型结合起来以表示此类间隔的范围。

Joda-Time 不包括处理部分范围的稳健方法;您的时间跨度选项是Period, Interval, and Duration。不过,我发现 Range 非常适合此类任务。

【讨论】:

  • 我刚刚测试了这个,当我测试一个不重叠到新的一年的范围时它可以工作。但是,我需要能够测试从 9 月到 1 月底的范围,当我运行测试时,它会在 1 月 31 日初始化时崩溃。像这样:Range<MonthDay> mRegSeason = Range.closed(new MonthDay(9, 1), new MonthDay(1, 31)); 有解决办法还是我必须用样板代码来解决这个问题?
  • 嗯,是的,一月在九月之前。 MonthDay 是一个有序类型,仅代表月和日。如果要合并年份,则需要使用 LocalDate 或其他日期类型。
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
  • 2016-01-10
  • 2014-06-25
  • 1970-01-01
相关资源
最近更新 更多