gpt4 book ai didi

android - KitKat 中的时间格式不起作用

转载 作者:行者123 更新时间:2023-11-29 16:44:34 26 4
gpt4 key购买 nike

我有一个从我的服务器转换时间的函数,它在 android api 24 上运行良好,但现在我在 KitKat (Api 19) 上进行测试,时间转换无法正常工作。两个设备接收相同的数据,但转换不一样。两台设备都设置了“自动日期和时间”,并且两台设备的时间相同。

从服务器接收到的字符串:

(Api 19) -> CurrentTimeStamp:2018-02-23T15:50:15.9643834Z
(Api 24) -> CurrentTimeStamp:2018-02-23T15:50:15.9373834Z

转化

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
try {
Date dateServer = dateFormat.parse(currentTimeStamp);
String currentDate = dateServer.toString();
} catch (ParseException e) {
e.printStackTrace();
}

这打印:

(Api 19) -> DateServer:Fri Feb 23 12:26:28 CST 2018
(Api 24) -> DateServer:Fri Feb 23 09:50:15 CST 2018 <- this time is correct

如有任何帮助或想法,我们将不胜感激

最佳答案

SimpleDateFormat 的精度为毫秒,因此它不能处理超过 3 位的小数秒。检查这个答案:String-Date conversion with nanoseconds

此外,末尾的“Z”表示日期为 UTC,因此如果您只是将其视为文字(引号内),则此信息(以 UTC 为单位)将被忽略(当然您需要通过在格式化程序中设置时区来解决此问题,但正确的方法是使用“X”模式来解析它)。

无论如何,要解析超过 3 个小数位,您可以使用 ThreeTen Backport。只需按照此答案中的链接进行安装:How to add Duration to LocalDateTime for API level lower than 26

或者,如果您的 API 级别已经有 java.time 类,那就更好了。无论如何,java.time 和 ThreeTen Backport 的代码是相同的:

Instant instant = Instant.parse("2018-02-23T15:50:15.9643834Z");

如果您仍然需要使用 java.util.Date,转换起来很容易:

// java.time
Date date = Date.from(instant);

// ThreeTenBackport
Date date = DateTimeUtils.toDate(instant);

请记住,由于 API 的限制,在转换为 Date 时,仅保留前 3 位小数,其他的都将丢失。

关于android - KitKat 中的时间格式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48951829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com