Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 把几次约会分成小块_Java_Date - Fatal编程技术网

Java 把几次约会分成小块

Java 把几次约会分成小块,java,date,Java,Date,我有两个约会: public static Date getStartDate() { Calendar instance = Calendar.getInstance(); instance.set(Calendar.YEAR, 2020); instance.set(Calendar.MONTH, 7); instance.set(Calendar.DAY_OF_MONTH, 7); instance.set(C

我有两个约会:

public static Date getStartDate() {
        Calendar instance = Calendar.getInstance();
        instance.set(Calendar.YEAR, 2020);
        instance.set(Calendar.MONTH, 7);
        instance.set(Calendar.DAY_OF_MONTH, 7);
        instance.set(Calendar.HOUR_OF_DAY, 9);
        instance.set(Calendar.MINUTE, 50);
        return instance.getTime();
    }

    public static Date getEndDate() {
        Calendar instance = Calendar.getInstance();
        instance.set(Calendar.YEAR, 2020);
        instance.set(Calendar.MONTH, 7);
        instance.set(Calendar.DAY_OF_MONTH, 11);
        instance.set(Calendar.HOUR_OF_DAY, 9);
        instance.set(Calendar.MINUTE, 46);
        return instance.getTime();
    }
我有一个限制,如果开始和结束时间超过一个小时,这个过程就会失败,所以如果我有一个大的时间框架,就像前一个一样,我需要把它分成不超过一个小时的小部分

是否有一个api可以将给定的开始和结束时间划分为一系列较小的时间段


谢谢。

没有内置方法,但您可以轻松编写自己的方法。这将构造一个间隔一小时的
java.time.Instant
对象列表,从开始日期开始,在结束日期之前结束:

    Instant start = getStartDate().toInstant();
    Instant endExclusive = getEndDate().toInstant();
    ArrayList<Instant> chunks = new ArrayList<>();

    Instant chunkStart = start;
    while (chunkStart.isBefore(endExclusive)) {
        chunks.add(chunkStart);
        chunkStart = chunkStart.plus(1, ChronoUnit.HOURS);
    }
Instant start=getStartDate().toInstant();
Instant endExclusive=getEndDate().toInstant();
ArrayList chunks=新的ArrayList();
即时启动=启动;
while(chunkStart.isBefore(endExclusive)){
chunks.add(chunkStart);
chunkStart=chunkStart.plus(1,ChronoUnit.HOURS);
}

请注意,
end
日期在这里是排他性的:它从未添加到
chunks
列表中。

您可以做的是将总时间转换为总小时。并将该值添加到数据库开始计时器中,每小时一个小时,在计时器完成时减少该计数--。我建议您不要使用
日历
。那门课设计得很糟糕,而且早已过时。改为使用例如
ZoneDateTime
Instant
,这两种方法都来自.Spot on!不过,我可以看到需要改进的地方:如果
结束
包含在内,则条件应该是
!chunkStart.isAfter(end)
。尽管问题中未提及独占/包含条件,但在答案中添加此注释将使答案对未来访客更有用。