如何在较旧的Android中降级java.time代码?



我有这个简洁的代码,它生成两个日期之间的日期列表,然后是当天的日期,以及它在列表中的位置(最重要的是,所有日期都采用相同的格式,这使得比较它们变得容易(。

//Create list of days
String s = "2018-08-28";
String e = "2018-09-05";
LocalDate start = LocalDate.parse(s);
LocalDate end = LocalDate.parse(e);
List<LocalDate> totalDates = new ArrayList<>();
while (!start.isAfter(end)) {
totalDates.add(start);
start = start.plusDays(1);
}
//Date and place of current day
LocalDate a = LocalDate.now();
int current_day = totalDates.indexOf(a) + 1;

问题是,当我在Java IDE中玩这个代码时,我不知道它的某些部分(.parse() ; .now() ; .isAfter() ; .plusDays()(是为26+级API手机保留的。或者,我的应用程序应在其中工作的最大 API 是 API 23。

我想知道如何以最有效的方式"降级"它,但我不知道该怎么做或从哪里开始。

向后移植

无需"降级"。大多数java.time功能已被向后移植。

ThreeTen-Backport库添加到您的 probject 中,该库专门适用于ThreeTenABP项目中的 Android。请参阅下面的链接,在底部。

传统的日期时间类是一个可怕的丑陋混乱 - 永远不要使用它们。

顺便说一下,您提到的那些文本格式是标准的,在ISO 8601中定义。java.time类在解析/生成字符串时默认使用这些格式。


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧传统日期时间类,如java.util.DateCalendarSimpleDateFormat

Joda-Time项目现在处于维护模式,建议迁移到 java.time 类。

要了解更多信息,请参阅Oracle 教程。并搜索堆栈溢出以获取许多示例和解释。规范为 JSR 310。

您可以直接与数据库交换java.time对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。不需要字符串,不需要java.sql.*类。

从哪里获得java.time类?

Java SE 8、Java SE 9、Java SE
  • 10、Java SE 11及更高版本 - 标准 Java API 的一部分,具有捆绑实现。
    • Java 9添加了一些小功能和修复。
  • Java SE 6 和 Java SE 7 大部分
    • java.time 功能在ThreeTen-Backport中向后移植到 Java 6 和 7。
  • Android
    • 更高版本的java.time类的 Android 捆绑实现。
    • 对于早期的Android(<26(,ThreeTenABP项目适应了ThreeTen-Backport(如上所述(。请参阅如何使用ThreeTenABP...

不再需要ThreeTeenABP来在旧版本的Android平台上启用对这些语言API的支持。 您可以使用核心库脱糖。

只需将 Android 插件更新到 4.0.0(或更高版本(,并在模块的 build.gradle 文件中包含以下内容:

android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.10'
}

最新更新