gpt4 book ai didi

java - Java 的日期是如何工作的?

转载 作者:行者123 更新时间:2023-11-29 10:20:34 25 4
gpt4 key购买 nike

您好,我有以下代码:

public Date convertFromGMTToLocal(Date date) {
return new Date(date.getTimezoneOffset() + newOffset*60*1000);
}

public Date convertFromLocalToGMT(Date date) {
return new Date(date.getTime() - date.getTimezoneOffset()*60*1000);
}

convertFromLocalToGMT 应该剥离时区信息,而 convertFromGMTToLocal 应该将时区信息放回去。我知道 java.util.Date 代表纪元的时间并且总是在 GMT 中,但是在显示日期时它默认为 JVM 的默认时区。

我得到的解释是,如果您的时区是 CST,并且是 CST 上午 10:00,您正在使用 convertFromLocalToGMT 将时区更改为 GMT,因此您实际上是在添加偏移量以获得 GMT,因此您将获得 CST 上午 4:00(偏移量是 - 6) 并使用 convertFromGMTToLocal 将将此 Date 对象转换回上午 10:00,而不管您的时区如何(最令人困惑的部分是如何?)。以上是如何工作的?我很困惑...

谢谢。

最佳答案

您几乎永远不要Date 添加偏移量以创建另一个Date - 您只会 如果您一开始就收到损坏的数据,请永远这样做。

您不应该使用此代码。试图以非设计方式处理 java.util.Date 的错误代码。如果您想表示特定时区的日期,请使用 Calendar(急)或 far 更好的 Joda Time API。

特别是,您获得的代码不会围绕时区转换工作 - 因为 date.getTimeZoneOffset() 的偏移量仍然考虑 date 为 UTC(因为这就是它的定义),即使您它视为本地日期/时间。

忽略 Date.toString() 显示的值 - 避免使用该方法。 或者使用 SimpleDateFormat 显示您感兴趣的时区,或者(再次更好)使用 Joda 的 DateTimeFormat 类。

关于java - Java 的日期是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7046921/

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