Java 无法将缺少的时间字符串添加到列表中
我正在尝试用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 我想要什
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
使分钟数的添加非常短和精确谢谢你,马来语,你的解决方案看起来不错,但我选择了上面的答案