Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向java.util.date对象添加毫秒时出现错误结果_Java_Date_Java.util.date - Fatal编程技术网

向java.util.date对象添加毫秒时出现错误结果

向java.util.date对象添加毫秒时出现错误结果,java,date,java.util.date,Java,Date,Java.util.date,当前时间是美国东部时间2020年4月4日星期六15:02:00 在以下代码段中,我创建了一个日期对象,并向其添加86400000L毫秒(1天): 输出为《美国东部标准时间2020年4月5日星期日14:02:00》。我不明白为什么结果只增加了我当前的23小时,而不是24小时 任何帮助都将不胜感激。代码运行良好。输出上的AEST表示日期与澳大利亚东部标准时间有关。谷歌搜索AEST dst显示,在2020年4月5日星期日凌晨3:00,时钟将“倒转”1小时。因此,在DST更改之前增加24小时,只会使时间

当前时间是美国东部时间2020年4月4日星期六15:02:00

在以下代码段中,我创建了一个日期对象,并向其添加86400000L毫秒(1天):

输出为《美国东部标准时间2020年4月5日星期日14:02:00》。我不明白为什么结果只增加了我当前的23小时,而不是24小时


任何帮助都将不胜感激。

代码运行良好。输出上的
AEST
表示日期与
澳大利亚东部标准时间有关。谷歌搜索AEST dst显示,在2020年4月5日星期日凌晨3:00,时钟将“倒转”1小时。因此,在DST更改之前增加24小时,只会使时间向前移动23小时


如果您明天运行该代码,您就不会有这个“问题”。

代码工作正常。输出上的
AEST
表示日期与
澳大利亚东部标准时间有关。谷歌搜索AEST dst显示,在2020年4月5日星期日凌晨3:00,时钟将“倒转”1小时。因此,在DST更改之前增加24小时,只会使时间向前移动23小时


如果您明天运行该代码,您就不会有这个“问题”。

一定要使用java.time,现代java日期和时间API,用于日期和时间工作

    ZonedDateTime currentTime = ZonedDateTime.now(ZoneId.of("Australia/Sydney"));
    System.out.println(currentTime);
    ZonedDateTime tomorrowSameTime = currentTime.plusDays(1);
    System.out.println(tomorrowSameTime);
刚刚运行时的输出:

请注意:我们明天的同一时间16:00。由于夏季(夏令时)结束,明天的UTC偏移量不同,+10:00而不是+11:00。重要的是,虽然我发现增加一天的时间几乎不可读,
.plusDays(1)
非常清楚地表达了我的意图

如果需要,请插入不同的东澳大利亚时区

你的代码出了什么问题?cherouvim在另一个答案中很好地解释了这一点,我无需重复。请允许我补充一点,
Date
类不仅设计得很差,会引起您的困惑,而且早已过时。我建议你不要用它。正如cherouvim在评论中指出的,用日期编程是很困难的。不要相信你自己可以将1天转换为86400000毫秒。将所有日期和时间计算留给经验证的库方法


链接:解释如何使用java.time。

一定要使用java.time,现代java日期和时间API,用于日期和时间工作

    ZonedDateTime currentTime = ZonedDateTime.now(ZoneId.of("Australia/Sydney"));
    System.out.println(currentTime);
    ZonedDateTime tomorrowSameTime = currentTime.plusDays(1);
    System.out.println(tomorrowSameTime);
刚刚运行时的输出:

请注意:我们明天的同一时间16:00。由于夏季(夏令时)结束,明天的UTC偏移量不同,+10:00而不是+11:00。重要的是,虽然我发现增加一天的时间几乎不可读,
.plusDays(1)
非常清楚地表达了我的意图

如果需要,请插入不同的东澳大利亚时区

你的代码出了什么问题?cherouvim在另一个答案中很好地解释了这一点,我无需重复。请允许我补充一点,
Date
类不仅设计得很差,会引起您的困惑,而且早已过时。我建议你不要用它。正如cherouvim在评论中指出的,用日期编程是很困难的。不要相信你自己可以将1天转换为86400000毫秒。将所有日期和时间计算留给经验证的库方法


链接:解释如何使用java.time。

啊,这解释了很多。看来今天,在所有的日子里,对测试我的一些代码来说是一个糟糕的时刻。谢谢用日期编程很难,所以我认为今天是测试你的代码的好日子,因为这使你成为一个更好的程序员。老实说,这确实有点奇怪(同时也很可笑)。同样的代码明天就可以使用了。此外,该代码现在在其他国家/时区也可以正常工作。在处理日期时,肯定需要检查很多角落的情况。代码在所有情况下都可以正常工作。这不是编程问题。在你居住的地方,你应该在几个小时内将时钟向后拨1小时。这是由于人们同意遵循的DST。Java.Ahh已经正确地实现了这一点,这解释了很多。看来今天,在所有的日子里,对测试我的一些代码来说是一个糟糕的时刻。谢谢用日期编程很难,所以我认为今天是测试你的代码的好日子,因为这使你成为一个更好的程序员。老实说,这确实有点奇怪(同时也很可笑)。同样的代码明天就可以使用了。此外,该代码现在在其他国家/时区也可以正常工作。在处理日期时,肯定需要检查很多角落的情况。代码在所有情况下都可以正常工作。这不是编程问题。在你居住的地方,你应该在几个小时内将时钟向后拨1小时。这是由于人们同意遵循的DST。Java已经正确地实现了这一点。我建议您不要使用
Date
。那门课设计得很糟糕,而且早已过时。改为使用
ZonedDateTime
DateTimeFormatter
,两者都来自@OleV.V。“这是一个很好的建议,但与眼前的问题完全无关,对吗?不完全如此,”切鲁维姆说。在我看来,提问者的困惑来自于
Date
类的糟糕设计。他/她应该使用
ZonedDateTime.plusDays(1)
来获得预期的结果,而不会产生任何混乱。我认为这与请求有关,任何帮助都将不胜感激。(除此之外,我还认为对问题中的任何其他方面都有帮助也有它的作用)。如果你将你的准确观察粘贴到问题中(而不是打字和冒不准确的风险),这将有助于我们帮助你。如果我理解正确,您当前的时间是AEDT(澳大利亚东部日光)
2020-04-04T16:00:30.579484+11:00[Australia/Sydney]
2020-04-05T16:00:30.579484+10:00[Australia/Sydney]