与UTC Java的时差

与UTC Java的时差,第1张

概述我想长时间转换日期.但是小时数在pc上计算错误.在Android模拟器上是正确计算的时间(在模拟器上是UTC时间).请帮忙Stringtime="15:54";Datedate=newDate();date.setHours(Integer.parseInt(time.substring(0,2)));longHours=(date.getTime()/(1000*60*60))

我想长时间转换日期.但是小时数在pc上计算错误.在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);                        // 14System.out.print("\n" + date.getHours());       // 15

解决方法:

将小时设置为日期时,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时,日期会解释您自己的时区并将其设置为小时.如果UTC(您期望的结果)与当前时区存在差异,则上述差异将反映在您的案例中(14 vs 15).

要解决此问题,一种选择是将您自己的时区显式带到UTC并匹配预期结果:

String time = "15:54";Date date = new Date();java.util.TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // ADDED THIS liNEdate.setHours(Integer.parseInt(time.substring(0, 2)));long hours = (date.getTime() / (60 * 60 * 1000)) % 24;System.out.print(hours); // Now THIS GIVES 15System.out.print("\n" + date.getHours()); // 15

如果您想准确解释与TimeZone相关的结果,则另一个选项将使用Calendar类(如果不是jodatime).

总结

以上是内存溢出为你收集整理的与UTC Java的时差全部内容,希望文章能够帮你解决与UTC Java的时差所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1077083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存