android-studio - 计算从今天到下一个生日的天数
问题描述
目前我正在开发一个android studio项目。我需要一个函数来返回今天到我下一个生日之间的天数。IE,
long daysForBirthday(dob){
.....
.....
return days;
}
我将使用返回值来发出通知。
如果今天是 23/05/2020 并且我的出生日期是 28/05/1999,则函数应该保持为 5。我在 android studio 中非常菜鸟,所以请原谅我的错误。谢谢 :)
解决方案
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
子包中导入日期和时间类。
链接
- Oracle 教程:日期时间解释如何使用 java.time。
- Java 规范请求 (JSR) 310,
java.time
第一次描述的地方。 - ThreeTen Backport 项目,
java.time
Java 6 和 7 的反向移植(ThreeTen for JSR-310)。 - ThreeTenABP , ThreeTen Backport 的 Android 版
- 问题:如何在Android项目中使用ThreeTenABP,有非常详尽的解释。
推荐阅读
- julia - Julia 中的多参数递归类型和类型推断
- javascript - 单击时将类动态添加到 td 并在 angular/typescript 中单击其他 td 时切换和删除
- r - R interpolate dataframe to draw plot
- php - .htaccess 重写会破坏相对文件路径?
- sql-server - 用于检查现有登录名和用户的 SQL Server 查询(如果存在则退出,否则创建)
- python - 使用 python 进行多项式求值
- android - Kotlin Queue returning object
- python - Is there a faster way to uniformly format first- and surnames on a pandas dataframe?
- unit-testing - Specify individual header files for CMake instead of full directory
- c# - How to properly add new item to ObservableCollection from another thread?