gpt4 book ai didi

java - 如何使 SimpleDateFormat 与夏令时一起工作?

转载 作者:行者123 更新时间:2023-12-02 10:01:09 28 4
gpt4 key购买 nike

我已经从服务器获取了 iso8601 格式的日期serverTimeDateFormat.parse("2019-04-10T16:04:14.677Z")当我解析日期时,它给出了与我的位置相对应的时间,但它晚了 1 小时(GMT+1,而它是 GMT+2),这个问题的解决方案是什么?我怎么认为已经切换到夏令时但仍然根据冬令时计算

最佳答案

java.time 和 ThreeTen 向后移植

    ZoneId myTimeZone = ZoneId.of("Europe/Bratislava");
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)
.withLocale(Locale.forLanguageTag("sk-SK"));

String serverDateTimeString = "2019-04-10T16:04:14.677Z";
Instant dateTime = Instant.parse(serverDateTimeString);
String formattedWithSummerTime = dateTime.atZone(myTimeZone)
.format(formatter);
System.out.println(formattedWithSummerTime);

此代码段的输出是:

  1. apríla 2019, 18:04:14 SELČ

即使您不会说斯洛伐克语,您也可以识别出服务器时间 16:04:14 已按照要求转换为 18:04:14,即 GMT+2。当然,您只需替换您自己的时区和区域设置即可。

哪些时区有夏令时 (DST),这些日期之间的日期内置于 Java 中,不需要应用程序程序员特别注意。许多欧洲时区(以及一个非洲时区)通常为 GMT+1,夏季为 GMT+2,所以我只选择其中一个进行说明。

我非常有意识地避免使用您在问题中提到的 SimpleDateFormat 类(尽管它也知道时区和夏令时并且可以在此处使用)。那个类是出了名的麻烦,而且幸运的是早已过时了。相反,我使用 java.time,现代 Java 日期和时间 API。

那么你的代码出了什么问题呢?你没有显示它,所以我不知道,但可能怀疑你没有正确解析服务器字符串。 Z 表示 UTC,但程序员有时将其视为文字,因此 SimpleDateFormat 不知道解析的字符串是 UTC,这会导致错误的时间。

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在旧版和新版 Android 设备上都能很好地工作。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及较新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在 Java 6 和 7 中获取 ThreeTen Backport,即现代类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保使用子包从 org. Threeten.bp 导入日期和时间类。

链接

关于java - 如何使 SimpleDateFormat 与夏令时一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55621928/

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