为什么从UTC时间戳转换时,我总是得到错误的日期/时间?

世界杯足彩 934

帮你自己一个忙,使用java.time.*而不是Date/SimpleDateFormat。

如果你不能使用API26/Gradle4.x或更高版本(因此可以使用Java8),那么使用https://www.threeten.org/threetenbp/,直到你可以使用它,它可以通过杰克·沃顿的改编版在安卓上使用:https://github.com/JakeWharton/ThreeTenABP

要转换自纪元以来的时间瞬间,请执行以下操作:

代码语言:javascript复制 val instant = Instant.ofEpochMilli(milliseconds)

val result = instant.atOffset(ZoneOffset.UTC).toLocalDateTime() //for example有很多方法可以尝试。

不要忘记初始化要加载的TimeZone数据库的库。在您的Application类中,将以下代码添加到onCreate()

代码语言:javascript复制 AndroidThreeTen.init(this)若要格式化日期,可以继续使用上面的“结果”:

代码语言:javascript复制val result = ...

result.format(DateTimeFormatter...)有大量的DateTimeFormatter助手函数,请阅读文档,它非常容易使用。

其中之一就是ofPattern(...)

代码语言:javascript复制DateTimeFormatter

.ofPattern("EEEE, MMM d, h:mm aaa")

.withLocale(Locale.US) // you can use systemDefault or chose another天空,就是极限。