Android java.time.LocalDateTime

4
我正在编写一个Android应用程序,应该通过我在服务器端开发的HTTP REST API接收java.time.LocalDateTime对象。
问题是Android仍处于Java 7中,而java.time仅在Java 8中可用。
既然如此,那么在Android中表示包含日期和时间的变量的最佳方法是什么?我不想使用sql.timestamp。
谢谢!
5个回答

5

3
如果您的minSdkVersion为26(Android 8.0)或更高版本,可以使用LocalDateTime1。否则,您可以使用核心库去糖化。请注意保留HTML标签。
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.1.5'
}

你好,是的,我看到了。我正在实现这个选项,并且运行得很好,但是当我在较低版本的API上运行它时,会崩溃,因为找不到LocalDateTime。在这种情况下,你会怎么做?实现威胁吗? - MACROSystems
1
我已经广泛使用它,并且在旧版Android上运行良好。你在所有模块中都设置了 coreLibraryDesugaringEnabled true 吗? - Cristan
啊,是的,我正在开发一个库(对它们不太熟悉),但是我看到这个标志也应该添加到实现库的应用程序模块中,谢谢同事。 - MACROSystems

3
为什么在使用Java 8之前,还要费心去使用DateCalendar,而Android版本的Joda-time(非常接近Java 8日期功能)已经可用?
以下是更多信息的GIT存储库/网站: https://github.com/dlew/joda-time-android

3
Joda-Time 项目已进入维护模式。该团队建议迁移至 java.time 类。许多 java.time 功能已在 ThreeTen-Backport 项目中向 Java 6 和 7 回溯,同时也在 ThreeTenABP 项目中被适配到 Android 平台上。 - Basil Bourque
@Basil Bourque 谢谢您提供这些详细信息。 - davidxxx
Joda时间库添加了大约5k个方法。 - resource8218

1

2
麻烦的旧日期时间类,如Calendar现在已经过时,被java.time类所取代。许多java.time功能已经在ThreeTen-Backport项目中向Java 6和7进行了后移植,并在ThreeTenABP项目中进一步适用于Android。 - Basil Bourque

0

一个LocalDateTime对象已经通过HTTP REST API序列化为一个string|long JSON属性。

所以你只需要将JSON属性适配成一个Date对象,并且如果你想要向仅接受LocalDateTime对象的服务器发送一个Date对象,就需要将一个Date对象格式化为JSON属性。

几乎所有的JSON库都提供了一个dateFormat来将string序列化/反序列化为Date,而将长整型的timestamp转换为Date也是非常简单的:

Date date = new Date(timestamp);

自API 16(Android 4.1,Jelly Bean)起,Date(java.lang.String)已被弃用。 - Lou Morda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接