gpt4 book ai didi

java - 不同地点环境下日期差异天数不同

转载 作者:行者123 更新时间:2023-12-02 01:31:13 27 4
gpt4 key购买 nike

下面在本地给了我 279 天,但在不同的服务器上给了我 278 天,为什么会发生这种情况?

String sDate = "10-11-2017";
String eDate = "16-08-2018";
Date startDate = new SimpleDateFormat(MsmConstants.DATE_FORMAT).parse(sDate);
Date endDate = new SimpleDateFormat(MsmConstants.DATE_FORMAT).parse(eDate);
long difference = startDate.getTime() - endDate.getTime();
return Math.abs(difference / (1000 * 60 * 60 * 24));

最佳答案

这可能是由于某种舍入和时区差异所致。

由于 / 运算符左侧和右侧的操作数都是整型,因此该运算符实际上会丢失精度。

如果将表达式更改为:(double) Difference/(1000 * 60 * 60 * 24)你会注意到结果实际上是:-278.9583333333333

之所以不是确切的日期,是因为夏令时和类似的日期/时间调整。

如果您的 PC 上的区域设置与服务器不同,并且没有相同的夏令时,那么您可能会得到不同的数字,该数字超过 279

顺便说一句,Java 7 和更早的日期/时间 API 存在很多错误。 SimpleDateFormat 甚至不是线程安全的,并且夏令时和类似情况存在很多问题。您确实应该迁移到 Java 8。您所做的将简单地变为:Duration. Between(startDate, endDate) 并且计算将为您正确完成。

String sDate = "10-11-2017";
String eDate = "16-08-2018";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
LocalDateTime startDate = LocalDate.parse(sDate, formatter).atTime(0, 0);
LocalDateTime endDate = LocalDate.parse(eDate, formatter).atTime(0, 0);

return Duration.between(startDate, endDate).toDays();

您会发现这实际上为您提供了 279

关于java - 不同地点环境下日期差异天数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56037978/

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