gpt4 book ai didi

java - 与UTC java的时差

转载 作者:太空狗 更新时间:2023-10-29 12:43:27 25 4
gpt4 key购买 nike

我想把日期转换成长的。但是在电脑上计算的时间不正确。在 Android 模拟器上是正确计算的时间(在模拟器上是 UTC 时间)。请帮忙

String time = "15:54";

Date date = new Date();
date.setHours(Integer.parseInt(time.substring(0, 2)));

long Hours = (date.getTime() / (1000 * 60 * 60)) % 24;

System.out.print(Hours); // 14
System.out.print("\n" + date.getHours()); // 15

最佳答案

当您将小时设置为 Date 时,java.util.Date 对象独立于 TimeZone 的概念。根据其 javadoc here ,

Although the Date class is intended to reflect coordinated universal time (UTC), it may not do so exactly, depending on the host environment of the Java Virtual Machine.

因此,当您将小时数设置为 15 时,date 会解释您自己的时区并将小时数设置为它。如果 UTC(您期望的结果)和您当前的时区存在差异,则该差异会反射(reflect)在您的上述情况中(14 对 15)。

要解决它,一种选择是将您自己的时区显式设置为 UTC 并匹配预期结果:

String time = "15:54";

Date date = new Date();
java.util.TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // ADDED THIS LINE
date.setHours(Integer.parseInt(time.substring(0, 2)));

long hours = (date.getTime() / (60 * 60 * 1000)) % 24;

System.out.print(hours); // NOW THIS GIVES 15
System.out.print("\n" + date.getHours()); // 15

另一个选项是使用 Calendar类(如果不是 jodatime ),以防您想准确解释 TimeZone 相关结果。

关于java - 与UTC java的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777708/

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