问题描述
我是Android的新手。我想使用日历并设置开始和结束日期。问题是,我只知道开始日期(今天的日期),但是结束日期是动态的,并且是基于天数的。例如,我有int = 400天,结束日期应该是这样的:开始日期+400。我该怎么办?
PS 理想情况是开始日期和结束日期在范围内。
解决方法
1-将今天的日期转换为Unix Time
2-一天是86400秒。将变量乘以该变量(即86400x400)。
3-将步骤1添加到步骤2。这是您在Unix时间中的结束日期。
4-将Unix时间转换为所需的任何类型。
,java.time
考虑使用java.time(现代的Java日期和时间API)进行日期工作。
ZoneId here = ZoneId.of("Europe/Tallinn");
int numberOfDays = 400;
LocalDate startDate = LocalDate.now(here);
LocalDate endDate = startDate.plusDays(numberOfDays);
System.out.format("From %s to %s%n",startDate,endDate);
我刚才运行此代码段时,输出为:
从2020-09-02到2021-10-07
优势
您询问的Calendar
类设计不佳,而且已经过时。尽管可以完成这项工作,但使用起来很麻烦,对于典型的应用程序,您将需要与Date
或其他类之间进行转换。
java.time更好用。
问题:java.time是否不需要Android API级别26?
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
- 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
- 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
- 在较旧的Android上,请使用废除旧书或Android版本的ThreeTen Backport。称为ThreeTenABP。在后一种情况下,请确保使用子包从
org.threeten.bp
导入日期和时间类。
链接
- Oracle tutorial: Date Time解释如何使用java.time。
- Java Specification Request (JSR) 310,其中首先描述了
java.time
。 - ThreeTen Backport project,即
java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。 - Java 8+ APIs available through desugaring
- ThreeTenABP,Android版本的ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project,其中有非常详尽的解释。