gpt4 book ai didi

java - 将字符串转换为 java.util.date 并保留时区信息

转载 作者:行者123 更新时间:2023-12-01 19:04:02 25 4
gpt4 key购买 nike

在有人否决这个问题之前,我已经浏览了网络和 StackOverflow 以了解我所面临的情况,但没有找到任何内容,因此我将其作为一个新问题发布。

我遇到了 java 日期和时区的情况。

情况:

有 2 台服务器位于 2 个不同的时区,比如说 PST 和 CST。我从这些服务器接收 dateString(日期作为字符串)。但是,当我尝试使用 SimpleDateFormat 将字符串转换回日期时,日期信息(年、月、日、小时、分钟、秒)正在正确转换。但时区信息没有被保留。

如果我在 EST 的服务器上运行代码,pstDateString 将转换为日期格式,但时区将设置为 EDT,而不是 PST。

我用很多不同的方式思考过这个问题,但可能是我压力很大,我找不到解决方案。有什么帮助吗?

模拟这种情况的代码块:

        DateFormat outDF1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
outDF1.setTimeZone(TimeZone.getTimeZone("PST"));
String pstDateString = outDF1.format(new Date());

DateFormat outDF2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS");
outDF2.setTimeZone(TimeZone.getTimeZone("CST"));
String cstDateString = outDF2.format(new Date());

System.out.println("pstDateString "+pstDateString);
System.out.println("cstDateString "+cstDateString);

Date cstDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse(cstDateString);
Date pstDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS").parse(pstDateString);

System.out.println("Date after format from string: "+pstDate);
System.out.println("Date after format from string: "+cstDate);

当前输出:

pstDateString 2012-06-07 10:26:689
cstDateString 2012-06-07 12:26:694
Date after format from string: Thu Jun 07 10:26:00 EDT 2012
Date after format from string: Thu Jun 07 12:26:00 EDT 2012

预期输出:

pstDateString 2012-06-07 10:26:689
cstDateString 2012-06-07 12:26:694
Date after format from string: Thu Jun 07 10:26:00 PST 2012
Date after format from string: Thu Jun 07 12:26:00 CST 2012

最佳答案

java.util.Date 类没有时区,它始终采用 UTC。如果您想保留传入的时区,您将需要一个结合了日期和时区的新类。您可以创建一个简单的持有者类,或者可能使用日历。

关于java - 将字符串转换为 java.util.date 并保留时区信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936806/

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