如何使用Jodatime计算当前日期的下一个生日

How to calculate next birthday from current date using Jodatime

如何使用 Jodatime 计算当前日期的下一个生日。

例如当前日期是 2016 年 5 月 31 日

出生日期是 1991 年 2 月 26 日和 1991 年 7 月 23 日

输出如下所示。

Birthday        Next Birthday
Feb 26, 1991    Feb 26, 2017
July 23, 1991   July 26, 2016

我建议执行以下操作:

public static void main(String[] args) throws Throwable {

    String d1 = "Feb 26, 1991";
    String d2 = "July 23, 1991";

    DateTimeFormatter f = 
      DateTimeFormat.forPattern("MMM dd, yyyy").withLocale(Locale.ENGLISH);

    System.out.println(nextBirthDay(f.parseLocalDate(d1))); // 2017-02-26
    System.out.println(nextBirthDay(f.parseLocalDate(d2))); // 2016-07-23
}

private static LocalDate nextBirthDay(LocalDate date) {

    LocalDate today = LocalDate.now(DateTimeZone.getDefault());
    int year = today.getYear();

    int month = date.getMonthOfYear();
    int dayOfMonth = date.getDayOfMonth();

    if (
        today.getMonthOfYear() > month
        || (today.getMonthOfYear() == month && today.getDayOfMonth() > dayOfMonth)
    ) {
        year++;
    }

    return new LocalDate(year, month, dayOfMonth);
}