gpt4 book ai didi

java - Java 8 SimpleDateFormat 中可能存在错误?

转载 作者:行者123 更新时间:2023-12-01 07:43:41 26 4
gpt4 key购买 nike

这里是Java 8,我有以下代码:

public class PossibleBug {

public static void main(String[] args) {
new PossibleBug().run();
}

public void run() {

buildDate("20181205");

}

public Date buildDate(final String yyyyMmDd) throws ParseException {
TimeZone expectedTz = TimeZone.getTimeZone("America/New_York");
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
sdf.setTimeZone(expectedTz);

TimeZone actualTz = sdf.getTimeZone();

Date answer = sdf.parse(yyyyMmDd);
return answer;
}

}

非常基本的东西:

  1. 创建 SimpleDateFormat并将其时区设置为 EST
  2. 使用 SDF 解析日期字符串
  3. 结果应该也是美国东部时间的日期

但是在运行时,查看调试器结果:

enter image description here

这怎么可能?!?! sdf.parse(yyyyMmDd)返回 GMT 格式的日期。我是否遗漏了什么,或者这是 SimpleDateFormat 中的错误?

我能够调用buildDate并从不同的类中运行它,它似乎工作正常:

enter image description here

最佳答案

Date 不存储时区。它本质上只是一个long的包装器,在纪元之后存储毫秒。

当您打印它时(或者当您的调试器调用 toString() 方法来获取要显示的字符串表示形式时),将使用 JVM 的默认时区,无论它是如何创建的。

Date,尽管有这个名称,但并不模拟日期:它是时间上的瞬间

鉴于您的输入是 "20181205",请勿使用 Date:使用 java.time 中的类,例如 java .time.LocalDate.

关于java - Java 8 SimpleDateFormat 中可能存在错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59843664/

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