如何在24小时内划分一段时间?

fv2wmkja  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(280)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

23天前关门了。
改进这个问题
例如,我使用java.util.date,我有两个时间段:10:00:00-11:00:00,13:30:00-14:30:00
我想从24小时中删除这些时间段并获取剩余的时间?

7vhp5slm

7vhp5slm1#

避免遗留日期时间类

从不使用 java.util.Date . 这个类是与最早版本的java捆绑在一起的糟糕的日期时间类之一。这些遗留类在几年前被jsr310中定义的现代java.time类所取代。

本地时间

如果您使用的是一般时间,而不是特定日期,请使用 LocalTime 班级。

LocalTime.of( 10 , 0 )

创建一个类来定义时间范围。三个额外的图书馆有这样的范围类为一对学生 Instant 对象,以及一对 LocalDateTime 物体。但不幸的是,这对情侣没有课 LocalTime .
在Java16及更高版本中,我们可以使用记录。或者定义一个常规类。

public record LocalTimeRange ( LocalTime start , LocalTime end ) ;

设置输入,从早到晚排序。

List< LocalTimeRange > inputs = List.of(
    new LocalTimeRange ( LocalTime.of( 10 , 0 ) , LocalTime.of( 11 , 0 ) ) ,
    new LocalTimeRange ( LocalTime.of( 13 , 30 ) , LocalTime.of( 14 , 30 ) ) 
);

创建时间范围对象。
对于一般的24小时工作制,我们可以从 LocalTime.MIN . 从最小值到第一个输入范围的起始值。下一个范围是从第一次输入的结束到连续输入的开始。泡沫,冲洗,重复。在最后一次输入时,使用 LocalTime.MIN 或者 MAX 最后,根据你的需要。
请注意,我们使用半开放方法定义时间跨度,其中开始是包含的,而结束是独占的。这允许跨度整齐地对接,没有间隙。
把这些应用到约会上( LocalDate ),指定时区( ZoneId )生产 ZonedDateTime 对象。但要明白,并非所有的时间值都存在于特定区域的特定日期。诸如夏令时(dst)之类的异常情况意味着一天的长度可能会有所不同,例如23小时、23.5小时或25小时。某些时间值可能重复或不存在。

相关问题