代码之家  ›  专栏  ›  技术社区  ›  Kirby

是否存在与DateTime、dayOfYear()、isLeap()等效的java.time?

  •  3
  • Kirby  · 技术社区  · 8 月前

    我们有一些代码可以检查给定的一天是否是闰日,使用 org.joda.time 这很简单

    import org.joda.time.DateTime;
    
    DateTime date;
    return date.dayOfYear().isLeap()
    

    是否有等效的 java.time 检查给定日期是否为闰日的包?

    我们只使用格里高利字母( ISO 8601 )日历。

    2 回复  |  直到 8 月前
        1
  •  3
  •   Basil Bourque    8 月前

    日期是2月29日吗?

    这个 java.time API只有 java.time.Year::isLeap 方法;不以日为基础 isLeap 方法。

    如果你想知道一天是否是闰日,那么你可以检查一下这一天是否在2月29日。这个日期只存在于闰年。

    boolean isLeapDay(LocalDateTime dateTime) {
      return dateTime.getMonth() == Month.FEBRUARY 
          && dateTime.getDayOfMonth() == 29;
    }
    

    或者,使用 MonthDay 类,与 MonthDay.of ( Month.FEBRUARY , 29 ) .

    LocalDate today = LocalDate.now ( ZoneId.of ( "America/Edmonton" ) );
    boolean isLeapDay = MonthDay.from ( today ).equals ( MonthDay.of ( Month.FEBRUARY , 29 ) );
    
        2
  •  0
  •   Dawood ibn Kareem    8 月前

    据我所知,写这篇文章的最短方法是

    return Year.isLeap(myDate.getYear());
    

    假设 myDate 是a LocalDate 或a LocalDateTime ,以及 Year 已进口为 java.time.Year 。这使一年从 myDate 作为a int ,然后对其进行闰年检查。

    更新

    根据OP关于想知道这一天是2月29日的评论,我认为最清晰的写作方式可能是

    return myDate.getDayOfMonth() == 29 && myDate.getMonth() == Month.FEBRUARY;
    
    推荐文章