时区夏令时更改问题

问题描述 投票:0回答:1

在我的国家,夏令时规则已更改,我们不再使用它。因此很多设备都遇到了问题。我使用了不同的方法来解决这个问题,但只有其中一种可以正常工作。

我正在尝试将纪元时间转换为当地时间。例如

val epocTime = 1715244851730 // 12:24:11.730 PM GMT+03:30

当我使用

SimpleDateFormat
时,我得到错误的结果。

java.text.SimpleDateFormat("HH:mm", Locale.getDefault(Locale.Category.FORMAT))
.format(Date(time)) // 13:24

当我使用

java.time.LocalDateTime
时,我得到错误的结果

java.time.LocalDateTime.ofInstant(
    java.time.Instant.ofEpochMilli(epocTime),
    java.time.ZoneId.systemDefault()
) // 13:24:11.730

但是当我使用

ThreeTen
库时,我得到了正确的结果

org.threeten.bp.LocalDateTime.ofInstant(
    org.threeten.bp.Instant.ofEpochMilli(epocTime),
    org.threeten.bp.ZoneId.systemDefault(),
) // 12:24:11.730

所以问题是:

java time
不是
ThreeTen
库的替代品吗?

android java-time threetenbp
1个回答
0
投票

类似于 更新 Android tzdata 文件 以及我对 Android - 如何修复 java.time.zone.ZoneRulesException: 未知时区

的回答

因此,对于不再获得

tzdata
更新的旧设备,您需要使用joda-time-android,它似乎会以一定的频率更新tzdata,但请注意,如果您希望与当前
tzdata
集保持一致。 ThreeTenBackport 也存在类似的情况,您需要将库更新到最新版本才能获得
tzdata
更新。

© www.soinside.com 2019 - 2024. All rights reserved.