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)
。尽管问题中未提及独占/包含条件,但在答案中添加此注释将使答案对未来访客更有用。