Java 7 中的 ISO 8601 持续时间解析
ISO 8601 Time Duration Parsing in Java 7
我正在解析 YouTube API v3 并尝试提取似乎采用 ISO 8601 格式的持续时间。现在,Java 8 中有内置方法,但这需要我必须将 API 级别提高到 26 (Android O),这是我做不到的。有什么方法可以本地解析它吗?我使用的示例字符串是:PT3H12M
好消息!现在您可以使用 Android Gradle 插件 4.0.0+
对 java.time API 进行脱糖
https://developer.android.com/studio/write/java8-support#library-desugaring
所以这将允许您使用 Java 8 中与 java.time api 相关的内置方法 :)
这里有脱糖的详细说明api:
https://developer.android.com/studio/write/java8-support-table
你只需要将 Android 插件的版本升级到 4.0.0+ 并将这些行添加到你的 app-module 级别 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.9'
}
如果您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring and 。
下一节将讨论如何使用 modern date-time API。
与Java-8:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT3H12M");
LocalTime time = LocalTime.of((int) duration.toHours(), (int) (duration.toMinutes() % 60));
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
输出:
3:12 am
与Java-9:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT3H12M");
LocalTime time = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart());
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
输出:
3:12 am
请注意 Duration#toHoursPart
and Duration#toMinutesPart
是在 Java-9 中引入的。
我正在解析 YouTube API v3 并尝试提取似乎采用 ISO 8601 格式的持续时间。现在,Java 8 中有内置方法,但这需要我必须将 API 级别提高到 26 (Android O),这是我做不到的。有什么方法可以本地解析它吗?我使用的示例字符串是:PT3H12M
好消息!现在您可以使用 Android Gradle 插件 4.0.0+
对 java.time API 进行脱糖https://developer.android.com/studio/write/java8-support#library-desugaring
所以这将允许您使用 Java 8 中与 java.time api 相关的内置方法 :)
这里有脱糖的详细说明api:
https://developer.android.com/studio/write/java8-support-table
你只需要将 Android 插件的版本升级到 4.0.0+ 并将这些行添加到你的 app-module 级别 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.9'
}
如果您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring and
下一节将讨论如何使用 modern date-time API。
与Java-8:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT3H12M");
LocalTime time = LocalTime.of((int) duration.toHours(), (int) (duration.toMinutes() % 60));
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
输出:
3:12 am
与Java-9:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
Duration duration = Duration.parse("PT3H12M");
LocalTime time = LocalTime.of(duration.toHoursPart(), duration.toMinutesPart());
System.out.println(time.format(DateTimeFormatter.ofPattern("h:m a")));
}
}
输出:
3:12 am
请注意 Duration#toHoursPart
and Duration#toMinutesPart
是在 Java-9 中引入的。