首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java.time:获取两个LocalTime对象之间小时数差异的最简单方法

java.time:获取两个LocalTime对象之间小时数差异的最简单方法
EN

Stack Overflow用户
提问于 2019-06-14 02:11:16
回答 1查看 138关注 0票数 1

我想要获取特定时区中的当前时间与UTC时间之间的小时差。我试过这个:

代码语言:javascript
复制
 LocalTime time = LocalTime.now();
 System.out.println(time); //21:05:42:764

 LocalTime utcTime = LocalTime.now(ZoneId.of("UTC"));
 System.out.println(utcTime);  //18:05:42:769

 System.out.println(Duration.between(utcTime, time).getSeconds()/3600);  //2
 System.out.println(Duration.between(time, utcTime).getSeconds()/3600);  //-3

为什么最后两个结果之间存在差异,是否有更好的方法来实现?我要乘3路车。

EN

回答 1

Stack Overflow用户

发布于 2019-06-14 02:35:56

Duration是错误的类。在一个时区的"now“和另一个时区的"now”之间没有持续时间。有关这方面的有趣但令人难忘的思考方式,请参阅here

您似乎想知道给定时区与UTC的当前偏移量。为此,您可以使用ZonedDateTime类:

代码语言:javascript
复制
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
ZoneOffset offset = zdt.getOffset();
int offsetMinutes = offset.getTotalSeconds() / 60;
double offsetHours = ((double) offsetMinutes) / 60;
System.out.println(offsetHours);  // 5.5

如果您想使用计算机的当前时区,也可以只在第一行使用ZonedDateTime.now()

关于LocalTime -这只是时间部分(小时、分钟、秒和更小)。由于没有关联的日期,您不一定能确定它属于哪个时区偏移量。在任何给定的时刻,都有不止一个“今天”的日期在发生。时区偏移量的范围从UTC-12到UTC+14,因此确实存在在地球上某处同一天的两个不同日期发生相同时间的值。

例如,2019-01-01夏威夷的08:00:00 (Pacific/Honolulu)也是基里巴斯的08:00:00 (Pacific/Kiritimati),但是2019-01-02 -第二天!(Reference here.)因此,如果你有一个带有08:00:00LocalTime对象,并且它在这两个区域中的一个区域是08:00:00,你将无法分辨它是哪个区域,或者相应的UTC偏移应该是什么。

此外,请记住,时区偏移量不限于整个小时。现在的时区有半小时和45分钟的时差。从历史上看,还有其他的。

最后,请记住,偏移量不一定足以识别时区。许多时区在某些时间点共享偏移量,但在其他时间点不同。请参阅the timezone tag wiki中的“时区!=偏移”。

哦,关于你的结果,在一个方向上得到2,在另一个方向上得到-3 -这是由于你的整数除法造成的舍入误差。如果打印出秒值,您会注意到它们相差一秒(10799,vs -10800)。仔细研究一下,您会发现"now“包含了被getSeconds调用截断的小数秒。(您调用了.now()两次,因此它们的时间略有不同。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56586332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档