gpt4 book ai didi

java - SimpleDateFormat 解析根据时区改变时间

转载 作者:行者123 更新时间:2023-12-01 21:11:29 25 4
gpt4 key购买 nike

我在流中以字符串形式获取时间戳,它们的格式为 "2016-12-08 05:44:48 <timezone like IST, UTC>""2016-12-08 05:44:48 <timezone like +0000>"

我想将字符串转换为java.sql.Timestamp,所以我编写了一个函数,如下

private static Timestamp convertToTimestamp(String s) throws ParseException{
String dateFormat = new String("yyyy-MM-dd hh:mm:ss z");
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Date d = sdf.parse(s);
return new Timestamp(d.getTime());
}

当我运行时

Timestamp t = convertToTimestamp("2016-12-08 05:44:48 UTC");
System.out.println(t);

输出为2016-12-08 11:14:48.0

它会自动转换为 IST(可能是我的 JVM 默认值)。如何进行更改以使输出时间不更改为 IST 并且与输入时间相同?

最佳答案

Java 的 java.util.Datejava.sql.Timestamp不存储时区。

他们总是跟踪UTC时间。

当解析包含时区的日期字符串时,该字符串会被正确解析并从给定时区调整为 UTC。

在解析没有时区的日期字符串时,该字符串将在 JVM 的默认时区中进行解析并转换为 UTC,除非已向日期解析器显式指定另一个时区(通常为 SimpleDateFormat )。

显示(也称为格式化)日期/时间戳时,除非另有指定,否则它将以 JVM 的默认时区显示。

Date/Timestamp 对象无法存储时区,因此它们无法记住原始时区是什么。

如果您需要,请使用 Java 8 的 ZonedDateTime

关于java - SimpleDateFormat 解析根据时区改变时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41054528/

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