我和我的同事有一个有趣的问题。我们使用的旧系统只能返回ddMMM格式的日期数据。如果日期/月份是当年的过去日期,则我们假定此日期适用于下一年。否则,它适用于当前年份。

所以今天是4/30/2015。如果系统返回了带有12MAR的记录,那么该日期将转换为3/12/2016。如果日期读为07MAY,那么它将转换为5/7/2015

但是,尚不清楚如何确定29FEB的年份,因为它是a年。我们不可能用一年的时间实例化它,否则可能会引发错误。尝试根据当年的try/catch创建LocalDate时,我们使用了ojit_code。如果成功,我们认为它属于明年。

有没有更洁的方法可以做到这一点?

最佳答案

  • 将值解析为MonthDay,因为这就是您所拥有的。
  • 如果月份不是2月29日,则按正常
  • 处理
  • 如果是2月29日,则需要对其进行特殊处理:
  • 使用 Year.isLeap(long) 来确定当前年份是否是a年
  • 如果是:
  • 如果当前在2月29日或之前,则结果为今年2月29日
  • 如果当前时间是2月29日之后,则需要应用规则-您可以选择明年3月1日或明年2月28日
  • 如果不是(今年a年)
  • 如果当前在2月28日或之前,则需要再次应用规则,可能要在今年3月1日或2月28日返回
  • 如果当前在2月28日之后,则该日期在逻辑上属于明年...
  • 如果明年是a年,则结果大概是明年2月29日
  • 如果明年不是a年,则再次需要一个规则

  • 希望它概述了您需要考虑的三个“奇数”条件-我们没有足够的信息来告诉您在这些条件下该怎么做。

    10-02 03:33