在 Kotlin 中为 API 级别小于或等于 16 创建 Date 对象

Muk*_*iya 4 datetime android timestamp date kotlin

这听起来可能非常有趣和基本,但我正在努力通过将纪元的秒数​​传递给它来在 Kotlin 中创建 DateTime 类型的对象。

我得到的例子要么是需要 API 级别 26 的库,要么只是谈论从 DD-MM-YYYY 字符串到其他格式的格式转换。

到目前为止,我已经尝试过“LocalDateTime”、“Timestamp”、“Date”,但 Kotlin 要么拒绝识别它们,要么不同意函数参数,要么无法解决命名空间冲突。或者示例是 Java 的,它在 Kotlin 中不起作用或在 Kotlin 中没有等效项。

使用 Date() 我收到错误“无法访问 '':它在 Date() 中是私有的”

使用 LocalDate、LocalDateTime,我收到 API 级别错误

使用 Timestamp 时出现错误“无法使用提供的参数调用以下任何函数”。我将 Long 作为参数传递,如文档中所述。但它期待“包裹”或“日期”。

有人可以帮忙吗?

Bas*_*que 10

更新:在最新版本的 Android 工具中,API 脱糖为旧版本的 Android 带来了 Android 26 及更高版本中内置的大部分java.time功能。

在此处输入图片说明


tl;博士

避免遗留的日期时间类

Date&这样的遗留类Calendar糟糕,是由不了解日期时间处理的人创建的。这些类在多年前被现代java.time取代JSR 310 中定义类所。

时间

Instant类替换Date类,均代表在UTC的力矩(零小时-分钟-秒的偏移量)。

Instant instant = Instant.now() ;  // Capture the current moment in UTC.
Run Code Online (Sandbox Code Playgroud)

Calendar级,或者更确切地说,其最常用的具体子类GregorianCalendar所取代ZonedDateTime

ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ) ;  // Capture the current moment as seen in the wall-clock time used by the people of a particular region (a time zone). 
Run Code Online (Sandbox Code Playgroud)

Java 中所有日期时间类型的表,包括现代的和传统的

转变

最好完全避免遗留日期时间类。但有时您可能需要与尚未更新为java.time 的旧代码进行互操作。在这种情况下,转换。查看添加到旧类的新to…/from…转换方法。

Calendar calendar = GregorianCalendar.from( zdt ) ;
Run Code Online (Sandbox Code Playgroud)

…和…

ZonedDateTime zdt = ( ( GregorianCalendar ) calendar ).toZonedDateTime() ;
Run Code Online (Sandbox Code Playgroud)

后端口

java.time类是建立在Java 8和更高版本,而Android 26及更高版本。

对于 Java 6 和 7,请使用ThreeTen-Backport项目中的后向端口。大多数java.time功能都可以在那里找到。该项目由领导java.time项目和 JSR 310的同一个人Stephen Colebourne领导。

对于 26 之前的 Android,使用该后端移植到 Android 的适配,即ThreeTenABP项目。

哪个 java.time 库与哪个版本的 Java 或 Android 一起使用的表


小智 1

我使用 Kotlin 日历

val date = Calendar.getInstance()
date.timeInMillis = 5000000
txtDate.text = date.time.toString()
Run Code Online (Sandbox Code Playgroud)