gpt4 book ai didi

java - 在时区之间转换,即使日期相同(UTC 到 UTC)

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

我一直很困惑为什么下面的代码会导致我的日期从 25 日更改为 24 日

SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy");
DateTimeZone customerZone = DateTimeZone.forTimeZone(TimeZone.getTimeZone("UTC"));
DateTimeZone serverZone = DateTimeZone.UTC;

Date date = sd.parse("25/05/2014");

DateTime source = new DateTime(date).withZone(customerZone).withHourOfDay(5);

LocalDateTime ldate = new LocalDateTime(source, serverZone);
System.out.println(ldate.toDate()); //expected to be Sat May 25 05:00:00

结果 “SAST 2014 年 5 月 24 日星期六 05:00:00”

最佳答案

您还没有为 SimpleDateFormat 设置时区,所以它默认为您环境的时区,我猜是 "Africa/Johannesburg",因为你的结果中有 SAST。

所以当你做这部分的时候:

SimpleDateFormat sd = new SimpleDateFormat("dd/MM/yyyy");
Date date = sd.parse("25/05/2014");

date 对象将是 SAST 中的午夜,即 UTC 中前一天晚上 10 点。其余部分从那里开始,因为从那时起您将使用 UTC。

此外,在最后,您调用 toDate,这会产生一个 Date 对象。当您输出时,本地时区再次影响结果。

您可以考虑对 SimpleDateFormat 对象调用 setTimeZone。这至少会使开始部分正确。但是您还应该使用 format 方法来输出最终的字符串。

但是,更好的解决方案是使用 JodaTime's DateTimeFormatter反而。那么您根本不必使用 SimpleDateFormatDate

关于java - 在时区之间转换,即使日期相同(UTC 到 UTC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340850/

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