gpt4 book ai didi

java - SimpleDateFormat.parse() 将 DTstring 转换为本地时间。可以转换为源时间吗?

转载 作者:行者123 更新时间:2023-12-01 13:18:51 26 4
gpt4 key购买 nike

我已经关注了这个SO answer用于 8601 的日期时间转换。

我举个例子straight from w3 :

1994-11-05T08:15:30-05:00 corresponds to November 5, 1994, 8:15:30 am, US Eastern Standard Time.

1994-11-05T13:15:30Z corresponds to the same instant.

这就是我在 android 中运行的

SimpleDateFormat sdfSource = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ");
dateTime = sdfSource.parse("2014-03-06T11:30:00-05:00");
System.out.println(dateTime); //Thu Mar 06 18:30:00 EET 2014

显然.parse()的输出是本地感知的日期时间。自现在我处于该时区以来,已从 EST(-05:00) 转换为 EET (+02:00)。但是我不想要这种自动转换。

有没有办法解析 yyyy-MM-dd'T'HH:mm:ssZZZZZ 格式的日期时间字符串并显示该时区的日期时间?首选输出:

Thu Mar 06 11:30:00 EST 2014

EST 和我的位置就是一个例子。它也可以是任何其他时区。

最佳答案

内部 Date 对象采用 UTC 格式,这就是它们被解析的内容。

您无法从日期中检索原始时区,但可以尝试从原始 ISO-8601 标记中检索它,并在格式化时使用它。

当您使用 toString() 将其转换为字符串时,它会使用您的本地设置来格式化日期。如果您想要特定的表示形式,请使用格式化程序来格式化输出,例如

int rawTimeZoneOffsetMillis = ...; // retrieve from ISO-8601 stamp and convert to milliseconds
TimeZone tz = new SimpleTimeZone(rawTimeZoneOffsetMillis, "name");

DateFormat outputFormat = DateFormat.getDateTimeInstance();
outputFormat.setTimeZone(tz);
System.out.println(df.format(dateTime));

ISO-8601 时间戳无法用 SimpleDateFormat 完全解析。 This answer有一些代码可以解决一些限制。

关于java - SimpleDateFormat.parse() 将 DTstring 转换为本地时间。可以转换为源时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22221209/

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