gpt4 book ai didi

java - 如何在荷兰等 CET 运行的服务器中处理英国夏令时

转载 作者:行者123 更新时间:2023-12-02 13:30:47 25 4
gpt4 key购买 nike

我们的服务器在荷兰运行,但用户在英国使用该应用程序。

对于英国,2017-03-26 02:30:00 是有效的日期时间,但在荷兰则无效。

我正在使用代码通过设置时区来转换时间。但它没有给我正确的输出。

    String toDate ="2017-03-26 02:30:00";//Valid Time in UK
Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// Use London's time zone to format the date in
df.setTimeZone(TimeZone.getTimeZone("London"));

System.out.println("Date and time in London: " + df.parse(toDate));

程序输出:伦敦日期和时间:2017 年 CEST 3 月 26 日星期日 04:30:00

所需输出:伦敦日期和时间:Sun Mar 26 02:30:00 CEST 2017

使用的Java版本:1.7。无法对某些依赖项使用 joda 时间。

最佳答案

首先说明一下,TimeZone.getTimeZone()是危险的,如果它不能识别ID字符串,它会默认给你GMT。确切地说,在伦敦,这与正确的结果非常接近,您可能会被愚弄一段时间。 TimeZone.getTimeZone("London") 为您提供 UTC(或 GMT)。正如 Stefan Freitag 指出的那样,正确的英国时区必须是 TimeZone.getTimeZone("Europe/London")

接下来是一个非常常见的误解:Date 对象中没有时区。这只是一个时间点。那么为什么它被打印为 Sun Mar 26 04:30:00 CEST 2017,其中 CEST 显然指的是一个时区(中欧夏令时间,在荷兰使用) )?打印日期时,您隐式调用 Date.toString()。该方法根据 JVM 的默认时区无条件打印时间。因此,为用于解析的 DateFormat 设置时区在这里不起作用。因此,正如 Hugo 在评论中所做的那样,更改 JVM 的时区设置是有效的。为英国用户获得正确输出的另一种方法是使用带有英国时区的 DateFormat 将日期格式化回字符串。

如果你一开始就使用Hugo的技巧,在创建DateFormat之前,它也会有英国时区,并且你不需要调用df.setTimeZone() (当然,如果您认为这会使代码更清晰,您也可以这样做)。

期待有一天能够使用 Java 8 或更高版本。 java.time 中的新日期和时间类通常不会像旧的那样带来惊喜。

关于java - 如何在荷兰等 CET 运行的服务器中处理英国夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192330/

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