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

时间:2018-11-30 09:27:59

标签: java arraylist

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

RoombookedFrom = Fri Nov 30 11:15:00 CET 2018

RoombookedTo = Fri Nov 30 12:30:00 CET 2018

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

ArrayList<String> list1 = new ArrayList<String>();

list1 = [11:15, 12:30]

但是在这里,我也愿意存储缺少时间的缺少的时间。例如

我想要的

每隔15 mins的时间,我想建立一个从11:1512:30的列表

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

所以。例如2

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

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

我尝试过的事情

我曾尝试为此制定一种方法,将小时数转换为数字并计算差值,但我不知道如何管理此处的分钟数以正确显示小时数。

我也尝试在stackoverflow上进行搜索,但是没有找到合适的解决方案

2 个答案:

答案 0 :(得分:2)

以下代码将满足您的目的:

    @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();
    }
}

答案 1 :(得分:1)

如我所见,您可能需要从两个角度进行处理。

首先,您可能想创建自己的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类,在您可以创建它的实例之后,您可能想要使用其build int方法plusMinutes(15)

 LocalTime bookTime = LocalTime.of(10, 30);
 LocalTime nextTime = bookTime.plusMinutes(15);

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