gpt4 book ai didi

Java时间忽略夏令时规则

转载 作者:行者123 更新时间:2023-12-02 11:31:28 24 4
gpt4 key购买 nike

我正在以 POSIX 格式导出 TZ 变量以在 Linux 上设置时区。例如:

export TZ="EST+5EDT,M3.2.0/02:00,M11.1.0/02:00"

Linux date 命令返回:

Wed Mar 14 03:47 EDT 2018

Java ZonedDateTime.now() 返回:

2018-03-14T02:47:36.808[GMT-05:00]

Java 似乎没有考虑 DST 规则。可能出了什么问题?

最佳答案

我不确定您使用的 Linux 版本,但我已经在 Red Hat 4.4 中进行了测试,它接受 IANA's names :

export TZ=America/New_York
date

输出是:

Qua Mar 14 08:37:25 EDT 2018

我还检查了网上的一些文章,所有示例都使用“America/New_York”、“Europe/London”等名称。

但是无论如何,如果您的 Linux 版本不能使用此功能,最好将代码更改为不使用 JVM 默认时区:

ZonedDateTime.now(ZoneId.of("America/New_York"));

实际上,我认为使用特定时区更好,因为默认can be changed at runtime ,对于在同一 JVM 中运行的任何应用程序。即使您可以控制应用程序的功能,某些基础设施/环境维护也可能会有意或无意地改变这一点 - 这发生在我身上一次,这使我开始在任何地方使用显式时区名称。

并且始终更喜欢采用大陆/地区格式的 IANA 名称。像 EST+5EDT 这样的名称是固定的,因为它们仅代表一个偏移量(在本例中为 GMT-05:00),没有任何夏令时规则。只有 America/New_York 这样的名称才包含 DST 规则。

关于Java时间忽略夏令时规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49272474/

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