gpt4 book ai didi

java - Android 上的 String.format() 应该能够感知时区吗?

转载 作者:行者123 更新时间:2023-12-02 03:45:09 32 4
gpt4 key购买 nike

我使用以下代码将 GPS 位置的时间戳转换为人类可读的形式:

String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS", location.getTime())

根据 the docs ,GPS 位置时间戳应采用 UTC 格式。但是,我返回的字符串是本地时间(在两个不同的设备上测试的)。

我尝试使用另一种形式的 String.format(),它需要一个额外的 Locale 参数,并向其传递一个 null 语言环境(根据docs,意思是“没有本地化”)——还是一样。 (Locale 的文档根本没有提到时区,因此我怀疑区域设置是这里的问题。)

我的另一个怀疑是 GPS 堆栈可能不会按照指定的方式运行,提供本地时间而不是 UTC。我对此进行了测试

String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS", (long) 0)

返回

1970-01-01 01:00:00

这是纪元的开始加上 CET(设备的时区)的时区偏移量。因此,偏移量显然是由 String.format() 添加的。

String.format() 应该进行任何时区转换吗?我如何影响此行为,即选择要转换到的时区或完全抑制转换?

最佳答案

String.format 表示默认时区的日期/时间。要采用 UTC 格式,请改用 SimpleDateFormat,您可以在其中显式设置要使用的时区:

String formatInUtc(long millis) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
df.setTimeZone(TimeZone.getTimeZone("UTC"));
return df.format(new Date(millis));
}

E.例如:

System.out.println(formatInUtc(0L)); //  1970-01-01 00:00:00

顺便说一句,区域设置和时区是正交的:区域设置决定文本表示的各个方面(数字、符号、分隔符、语言),而时区则决定时钟如何从 UTC 偏移。

关于java - Android 上的 String.format() 应该能够感知时区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36363321/

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