Java time:获取两个LocalTime对象之间小时差的最简单方法
我想得到特定时区的当前时间和UTC时间之间的小时差。我试过这个:Java time:获取两个LocalTime对象之间小时差的最简单方法,java,time,localtime,java-time,Java,Time,Localtime,Java Time,我想得到特定时区的当前时间和UTC时间之间的小时差。我试过这个: 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(u
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。
持续时间
是错误的课程。一个时区的“现在”和另一个时区的“现在”之间的持续时间为零。要了解有趣但令人难忘的思考方式,请参阅
您似乎想知道给定时区当前与UTC的偏移量。您可以使用ZoneDateTime
类:
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
如果要使用计算机的当前时区,也可以在第一行使用ZoneDateTime.now()
关于LocalTime
,这只是时间部分(小时、分钟、秒或更小)。因为没有关联的日期,所以您不必确定它属于哪个时区偏移。在任何特定时刻,“今天”都有不止一个日期。时区偏移范围从UTC-12到UTC+14,因此确实存在一天中的同一时间发生在地球上某个地方的两个不同日期的值
例如,2019-01-01夏威夷(Pacific/Honolu
)的08:00:00
)也是基里巴斯(Pacific/Kiritimati
)的08:00:00,但2019-01-02是以下日期!()因此,如果您有一个带有08:00:00
的LocalTime
对象,并且它是08:00:00
在这两个区域中的一个,您将无法分辨它是哪一个,或者对应的UTC偏移量应该是什么
另外,请记住,时区偏移不限于整小时。现在的时区有半小时和45分钟的偏移。从历史上看,还有其他的
最后,请记住,偏移量不一定足以识别时区。许多时区在某些时间点共享偏移量,但在其他时间点不同。请参见中的“时区!=偏移”
哦,关于你的结果,一个方向是2
,另一个方向是-3
,这是整数除法造成的舍入误差。如果打印秒数值,您会注意到它们相隔一秒(10799
,vs-10800
)。仔细挖掘,您会发现“现在”包含被getSeconds
调用截断的小数秒数。(您调用了.now()
两次,所以它们的时间略有不同。)持续时间
是错误的类。一个时区的“现在”和另一个时区的“现在”之间的持续时间为零。要了解有趣但令人难忘的思考方式,请参阅
您似乎想知道给定时区当前与UTC的偏移量。您可以使用ZoneDateTime
类:
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
如果要使用计算机的当前时区,也可以在第一行使用ZoneDateTime.now()
关于LocalTime
,这只是时间部分(小时、分钟、秒或更小)。因为没有关联的日期,所以您不必确定它属于哪个时区偏移。在任何特定时刻,“今天”都有不止一个日期。时区偏移范围从UTC-12到UTC+14,因此确实存在一天中的同一时间发生在地球上某个地方的两个不同日期的值
例如,2019-01-01夏威夷(Pacific/Honolu
)的08:00:00
)也是基里巴斯(Pacific/Kiritimati
)的08:00:00,但2019-01-02是以下日期!()因此,如果您有一个带有08:00:00
的LocalTime
对象,并且它是08:00:00
在这两个区域中的一个,您将无法分辨它是哪一个,或者对应的UTC偏移量应该是什么
另外,请记住,时区偏移不限于整小时。现在的时区有半小时和45分钟的偏移。从历史上看,还有其他的
最后,请记住,偏移量不一定足以识别时区。许多时区在某些时间点共享偏移量,但在其他时间点不同。请参见中的“时区!=偏移”
哦,关于你的结果,一个方向是2
,另一个方向是-3
,这是整数除法造成的舍入误差。如果打印秒数值,您会注意到它们相隔一秒(10799
,vs-10800
)。仔细挖掘,您会发现“现在”包含被getSeconds
调用截断的小数秒数。(您调用了两次.now()
,所以他们的时间略有不同。)
为什么最后两个结果之间存在差异
对于两个计算的持续时间,您得到不同结果的原因是两次录制之间经过的时间很短,并且持续时间开始时间包含在范围内,但持续时间结束时间不包含在范围内
请考虑以下时间:6:00:00:001
vs8:00:00
。很明显,我们两小时只差一毫秒,但当我们考虑秒数时,我们要么得到7199
,要么得到-7200
。当我们进行整数运算时(即除以3600),我们将得到1
或-2
如果不是第一个时间戳上额外的一毫秒,那么这两个时间戳的绝对值是相同的
为什么最后两个结果之间存在差异
对于两个计算的持续时间,您得到不同结果的原因是两次录制之间经过的时间很短,而持续时间