首页 > 解决方案 > 计算从今天到下一个生日的天数

问题描述

目前我正在开发一个android studio项目。我需要一个函数来返回今天到我下一个生日之间的天数。IE,

long daysForBirthday(dob){
   .....
   .....
   return days;
}

我将使用返回值来发出通知。

如果今天是 23/05/2020 并且我的出生日期是 28/05/1999,则函数应该保持为 5。我在 android studio 中非常菜鸟,所以请原谅我的错误。谢谢 :)

标签: android-studiodate

解决方案


java.time 和 ThreeTenABP

我的建议是使用现代 Java 日期和时间 API java.time:

public static int daysRemain(LocalDate dob){
    LocalDate today = LocalDate.now(ZoneId.of("Asia/Kolkata"));
    long age = ChronoUnit.YEARS.between(dob, today);
    LocalDate nextBirthday = dob.plusYears(age);
    if (nextBirthday.isBefore(today)) {
        nextBirthday = dob.plusYears(age + 1);
    }
    long daysUntilNextBirthday = ChronoUnit.DAYS.between(today, nextBirthday);
    return Math.toIntExact(daysUntilNextBirthday);
}

让我们试一试:

    System.out.println(daysRemain(LocalDate.of(1999, Month.MAY, 28)));

当我今天(5 月 25 日在印度)运行这个电话时,输出是:

3

问题:java.time 不需要 Android API 级别 26 吗?

java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从org.threeten.bp子包中导入日期和时间类。

链接


推荐阅读