我正在尝试用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:15
到12: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上进行搜索,但是没有找到合适的解决方案
答案 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);
您将需要对字符串进行从/到字符串的解析的其他处理,但是有关添加分钟和处理分钟的逻辑已经实现,因此您不必担心它的正确性。