gpt4 book ai didi

java - 如何使用 java.util.Date 解析夏令时切换期间发生的其他时区的日期

转载 作者:行者123 更新时间:2023-11-30 08:55:13 24 4
gpt4 key购买 nike

我在解析以下日期时遇到问题。

08 März 2015 02:15:20

代码

SimpleDateFormat fmt = new SimpleDateFormat("dd MMM yyyy HH:mm:ss", Locale.GERMAN);
fmt.setLenient(false);
try {
System.out.println(fmt.parse("08 März 2015 02:15:20"));
} catch (ParseException e) {
e.printStackTrace();
}

经过一些调查,我发现由于 DST 的工作原理,我所在时区的凌晨 2 点不存在。时钟敲响凌晨 1:59 后,下一次更新时间为凌晨 3 点。我已经检查过以下日期是否属于这种情况:

"08 März 2015 01:59:59"
"08 März 2015 03:00:00"

两者都可以正确解析。

我想要的是一个日期对象,它可以正确解释我所看到的输入日期:

Mar 8, 2015 at 2:15:20 AM

我怎样才能做到这一点?

最佳答案

理想情况下,您会使用一个允许您解析日期/时间值的解析器,而无需尝试应用时区 - java.time.*Joda Time考虑到这一点,IIRC,两者都比 java.util.* 干净得多。

但是,如果您必须使用Date,并且您不知道起始时区,最安全的方法是使用TimeZone:

SimpleDateFormat parser = new SimpleDateFormat(
"dd MMM yyyy HH:mm:ss",
Locale.GERMAN);
parser.setLenient(false);
parser.setTimeZone(TimeZone.getTimeZone("UTC"));

因此,这会将其解析为就好像它最初是 UTC 格式一样 - 因此当您想将其格式化回文本时,您需要做同样的事情:

SimpleDateFormat formatter = new SimpleDateFormat(
"EEE d, yyyy at h:mm:ss tt",
Locale.US);
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String text = formatter.format(date);

关于java - 如何使用 java.util.Date 解析夏令时切换期间发生的其他时区的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150203/

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