Java 无法将缺少的时间字符串添加到列表中

Java 无法将缺少的时间字符串添加到列表中,java,arraylist,Java,Arraylist,我正在尝试用java构建一个房间预订应用程序。我有两个类型为Date的变量 RoombookedFrom=2018年11月30日星期五11:15:00 CET RoombookedTo=2018年11月30日星期五12:30:00 CET 基于这些日期,我正在构建新的字符串arraylist,并以字符串格式存储计时,如下所示: ArrayList list1=新的ArrayList() list1=[11:15,12:30] 但在这里,我也愿意存储丢失的时间,因为房间将不可用。e、 g 我想要什

我正在尝试用java构建一个房间预订应用程序。我有两个类型为
Date
的变量

RoombookedFrom=2018年11月30日星期五11:15:00 CET

RoombookedTo=2018年11月30日星期五12:30:00 CET

基于这些日期,我正在构建新的字符串arraylist,并以字符串格式存储计时,如下所示:

ArrayList list1=新的ArrayList()

list1=[11:15,12:30]

但在这里,我也愿意存储丢失的时间,因为房间将不可用。e、 g

我想要什么

每隔
15分钟
我想从
11:15
12:30

list1=[11:15,11:30,11:45,12:00,12:15,12:30]

所以。e、 g-2

如果它是
list2=[10:00,11:15]
,那么输出应该是

list2=[10:00,10:15,10:30,10:45,11:00,11:15]

我尝试的

我已经尝试了一种方法,将小时转换成数字,并计算出差值,但我不明白如何在这里管理分钟以正确显示小时


我还尝试在stackoverflow上搜索此问题,但没有找到任何合适的解决方案,因为我认为您可能希望从两个角度来处理此问题

首先,您可能希望创建自己的Hour类,该类将字符串拆分为小时和分钟,然后添加逻辑以添加15分钟(由于您可以轻松地对其进行单元测试,所以可能更容易检查正确性)

例如:

public class BookHour {

private int hours;
private int minutes;

BookHour(String formatedTime) {
    final String[] split = formatedTime.split(":");
    this.hours = Integer.valueOf(split[0]);
    this.minutes = Integer.valueOf(split[1]);
}

public int getHours() {
    return hours;
}

public int getMinutes() {
    return minutes;
}

public void setNextQuater() {
    // logic with changing hour and minutes
}
}
测试结果可能如下所示:

public class BookHourTest {

    @Test
    public void shouldParse() {
        // given
        String time = "10:30";

        // when
        final BookHour bookHour = new BookHour(time);

        // then
        assertEquals(bookHour.getHours(), 10);
        assertEquals(bookHour.getMinutes(), 30);
    }

}
通过这种方式,您可以测试所有需要的假设,并验证代码的正确性

然而,java为我们提供了可能有用的
LocalTime
类,在您能够创建它的实例之后,您可能希望使用它的buildint方法plusMinutes(15)


您将需要额外处理从/到字符串的解析,但是有关添加分钟数和处理它的逻辑已经实现,因此您不必担心它的正确性

在我看来,你可能想从两个角度来看待这个问题

首先,您可能希望创建自己的Hour类,该类将字符串拆分为小时和分钟,然后添加逻辑以添加15分钟(由于您可以轻松地对其进行单元测试,所以可能更容易检查正确性)

例如:

public class BookHour {

private int hours;
private int minutes;

BookHour(String formatedTime) {
    final String[] split = formatedTime.split(":");
    this.hours = Integer.valueOf(split[0]);
    this.minutes = Integer.valueOf(split[1]);
}

public int getHours() {
    return hours;
}

public int getMinutes() {
    return minutes;
}

public void setNextQuater() {
    // logic with changing hour and minutes
}
}
测试结果可能如下所示:

public class BookHourTest {

    @Test
    public void shouldParse() {
        // given
        String time = "10:30";

        // when
        final BookHour bookHour = new BookHour(time);

        // then
        assertEquals(bookHour.getHours(), 10);
        assertEquals(bookHour.getMinutes(), 30);
    }

}
通过这种方式,您可以测试所有需要的假设,并验证代码的正确性

然而,java为我们提供了可能有用的
LocalTime
类,在您能够创建它的实例之后,您可能希望使用它的buildint方法plusMinutes(15)


您将需要额外处理从/到字符串的解析,但是有关添加分钟数和处理它的逻辑已经实现,因此您不必担心它的正确性

以下代码将用于您的目的:

    @Test
public void test_stackOver() {
    String roomBookedFrom = "Fri Nov 30 11:15:00 CET 2018";
    String roomBookedTo = "Fri Nov 30 12:30:00 CET 2018";

    // Time Interval
    int minInterval = 15;
    SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:SSS Z yyyy");
    SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:mm");

    // List to hold times
    List<String> times = new ArrayList<>();
    try {
        Date from = format.parse(roomBookedFrom);
        Date to = format.parse(roomBookedTo);
        String timeFrom = timeFormatter.format(from);
        String timeTo = timeFormatter.format(to);
        times.add(timeFrom);
        while (from.before(to)) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(from);
            cal.add(Calendar.MINUTE, minInterval);
            from = cal.getTime();
            times.add(timeFormatter.format(cal.getTime()));
        }
        times.add(timeTo);
        System.out.println(times);
    } catch (ParseException e) {
        e.printStackTrace();
    }
}
@测试
公共无效测试_stackOver(){
字符串roomBookedFrom=“2018年11月30日星期五11:15:00 CET”;
字符串roomBookedTo=“2018年11月30日星期五12:30:00 CET”;
//时间间隔
int最小区间=15;
SimpleDataFormat格式=新的SimpleDataFormat(“EEE MMM dd HH:mm:SSS Z yyyy”);
SimpleDataFormat timeFormatter=新的SimpleDataFormat(“HH:mm”);
//等待时间列表
列表时间=新建ArrayList();
试一试{
datefrom=format.parse(roomBookedFrom);
Date to=format.parse(roomBookedTo);
字符串timeFrom=timeFormatter.format(from);
字符串timeTo=timeFormatter.format(to);
添加(timeFrom);
while(from.before(to)){
Calendar cal=Calendar.getInstance();
校准设定时间(从);
cal.add(Calendar.MINUTE,MiniInterval);
from=cal.getTime();
add(timeFormatter.format(cal.getTime());
}
times.add(timeTo);
系统输出打印项次;
}捕获(解析异常){
e、 printStackTrace();
}
}

以下代码将用于您的目的:

    @Test
public void test_stackOver() {
    String roomBookedFrom = "Fri Nov 30 11:15:00 CET 2018";
    String roomBookedTo = "Fri Nov 30 12:30:00 CET 2018";

    // Time Interval
    int minInterval = 15;
    SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd HH:mm:SSS Z yyyy");
    SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:mm");

    // List to hold times
    List<String> times = new ArrayList<>();
    try {
        Date from = format.parse(roomBookedFrom);
        Date to = format.parse(roomBookedTo);
        String timeFrom = timeFormatter.format(from);
        String timeTo = timeFormatter.format(to);
        times.add(timeFrom);
        while (from.before(to)) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(from);
            cal.add(Calendar.MINUTE, minInterval);
            from = cal.getTime();
            times.add(timeFormatter.format(cal.getTime()));
        }
        times.add(timeTo);
        System.out.println(times);
    } catch (ParseException e) {
        e.printStackTrace();
    }
}
@测试
公共无效测试_stackOver(){
字符串roomBookedFrom=“2018年11月30日星期五11:15:00 CET”;
字符串roomBookedTo=“2018年11月30日星期五12:30:00 CET”;
//时间间隔
int最小区间=15;
SimpleDataFormat格式=新的SimpleDataFormat(“EEE MMM dd HH:mm:SSS Z yyyy”);
SimpleDataFormat timeFormatter=新的SimpleDataFormat(“HH:mm”);
//等待时间列表
列表时间=新建ArrayList();
试一试{
datefrom=format.parse(roomBookedFrom);
Date to=format.parse(roomBookedTo);
字符串timeFrom=timeFormatter.format(from);
字符串timeTo=timeFormatter.format(to);
添加(timeFrom);
while(from.before(to)){
Calendar cal=Calendar.getInstance();
校准设定时间(从);
cal.add(Calendar.MINUTE,MiniInterval);
from=cal.getTime();
add(timeFormatter.format(cal.getTime());
}
times.add(timeTo);
系统输出打印项次;
}捕获(解析异常){
e、 printStackTrace();
}
}

看看
LocalTime
。它有一个函数
plusMinutes()
,可以让你很容易地在时间上加上分钟。我现在可以这样做,看看
LocalTime
。它有一个函数
plusMinutes()
,可以让你很容易地在时间上增加分钟。我现在可以这样做了,谢谢你。我试着用你的方法调试,效果很好:)谢谢你。我试着用你的方法进行调试,效果很好:)谢谢你,马来语,你的解决方案看起来不错,但我选择使用上面的答案,因为它与我的代码的上下文非常吻合,并且使用
LocalTime
使分钟数的添加非常短和精确谢谢你,马来语,你的解决方案看起来不错,但我选择了上面的答案