gpt4 book ai didi

java - 夏令时中的 DateUtils.addDays() 类问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:30 25 4
gpt4 key购买 nike

最近新西兰在 2015 年 9 月 27 日实行夏令时。

SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
sd.setTimeZone(TimeZone.getTimeZone("Pacific/Auckland"));
Date dateValue = sd.parse("2015-09-30");
System.out.println(dateValue); // prints "Tue Sep 29 07:00:00 EDT 2015" My local system timzone in EDT
dateValue = DateUtils.addDays(dateValue, -6); // 6 days back 24 Sep of Pacific/Auckland
System.out.println(dateValue); // prints "Tue Sep 23 07:00:00 EDT 2015"

第二个打印语句应该打印 Tue Sep 29 08:00:00 EDT 2015,因为夏令时没有生效。

问题是在 27 Sep 15 NZ = UTC+12 之前在 NZ = UTC +13 之后所以在 9 月 23 日它应该有时间 08:00:00 而不是 07:00:00

最佳答案

问题出在 Apache Commons 的 DateUtils.addDays 中:它使用带有默认时区的 Calendar 来添加和减去天数,而不是使用用户提供的时区.您可以在方法的源代码中看到这一点 add : 它调用 Calendar.getInstance() 而不是 Calendar.getInstance(someTimezone)

如果您自己构建Calendar 并设置正确的时区,问题就会消失:

SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
sd.setTimeZone(TimeZone.getTimeZone("Pacific/Auckland"));
Date dateValue = sd.parse("2015-09-30");
System.out.println(dateValue); // prints "Tue Sep 29 13:00:00 CEST 2015"

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Pacific/Auckland")); // set correct timezone to calendar
calendar.setTime(dateValue);
calendar.add(Calendar.DAY_OF_MONTH, -6);
dateValue = calendar.getTime();
System.out.println(dateValue); // prints "Wed Sep 23 14:00:00 CEST 2015"

关于java - 夏令时中的 DateUtils.addDays() 类问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32883812/

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