尝试在Java中迭代日期的无限循环
我正在尝试迭代日期,但没有成功,因为发生了inifite循环,它不会停止在数据库中创建记录。为什么? 我有下面的方法,它将作为参数传递的日期增加1,然后返回更新的日期尝试在Java中迭代日期的无限循环,java,date,for-loop,Java,Date,For Loop,我正在尝试迭代日期,但没有成功,因为发生了inifite循环,它不会停止在数据库中创建记录。为什么? 我有下面的方法,它将作为参数传递的日期增加1,然后返回更新的日期 public static Date addDays(Date date, int days) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DATE, days); return cal.g
public static Date addDays(Date date, int days) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days);
return cal.getTime();
}
然后我用这种方式在for循环中使用它
for (Date initDate = fromDate; initDate.before(toDate); addDays(initDate, 1)) {
// Do something...
}
fromDate和toDate是通过这种方式解析为sql.Date的JTextField中的值
private java.sql.Date fechaParser(String f) {
SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
Date date;
try {
date = formatDate.parse(f);
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
return sqlDate;
} catch (ParseException e) {
JOptionPane.showMessageDialog(null, "Wrong date format.");
e.printStackTrace();
}
return null;
}
addDays函数返回一个新日期,而不是将参数更改为一个
因此,您需要从以下内容更改for循环的增量部分:
for ( ...; addDays(initDate, 1)) { ...
为此:
for ( ...; initDate = addDays(initDate, 1)) { ...
addDays函数返回一个新日期,而不是将参数更改为一个
因此,您需要从以下内容更改for循环的增量部分:
for ( ...; addDays(initDate, 1)) { ...
为此:
for ( ...; initDate = addDays(initDate, 1)) { ...
公认的答案是正确的 从Java8和更高版本开始,Java.util.Date/.Calendar类现在已经过时 java.time 内置于Java8和更高版本中的框架取代了麻烦的旧Java.util.Date/.Calendar类。新类的灵感来源于一个非常成功的框架,该框架旨在作为其继承者,在概念上类似,但经过了重新设计。定义为。由项目扩展。看 首先,我们使用模式定义一个格式化程序,以匹配预期的输入字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
time框架包含一个类来表示仅日期的值,而不表示一天中的时间:。该类上的静态方法可以解析
String input = "05/07/2013";
LocalDate localDate_Start = LocalDate.parse( input , formatter );
如果用户给我们错误的文本输入,该方法将抛出错误。因此,我们应该捕获并处理该异常
try{
LocalDate localDate_Start = LocalDate.parse( input , formatter );
} catch ( DateTimeParseException e ) {
// … handle the exception …
}
LocalDate类包括一个用于添加天数的plusDays方法
LocalDate localDate_Stop = localDate_Start.plusDays( someNumberOfDays );
顺便说一句,在日期时间工作中,我们通常使用半开放式方法,其中开始是包含的,而结束是独占的。例如,一周的时间从星期一到下一个星期一,但不包括下一个星期一
对我来说,while循环比for循环更有意义
要做一些数据库工作,我们必须将java.time.LocalDate转换为java.sql.Date。有一天,JDBC驱动程序将被更新,以直接处理java.time类型,但在此之前,我们必须进行转换。查找新添加的转换方法,例如
公认的答案是正确的 从Java8和更高版本开始,Java.util.Date/.Calendar类现在已经过时 java.time 内置于Java8和更高版本中的框架取代了麻烦的旧Java.util.Date/.Calendar类。新类的灵感来源于一个非常成功的框架,该框架旨在作为其继承者,在概念上类似,但经过了重新设计。定义为。由项目扩展。看 首先,我们使用模式定义一个格式化程序,以匹配预期的输入字符串
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
time框架包含一个类来表示仅日期的值,而不表示一天中的时间:。该类上的静态方法可以解析
String input = "05/07/2013";
LocalDate localDate_Start = LocalDate.parse( input , formatter );
如果用户给我们错误的文本输入,该方法将抛出错误。因此,我们应该捕获并处理该异常
try{
LocalDate localDate_Start = LocalDate.parse( input , formatter );
} catch ( DateTimeParseException e ) {
// … handle the exception …
}
LocalDate类包括一个用于添加天数的plusDays方法
LocalDate localDate_Stop = localDate_Start.plusDays( someNumberOfDays );
顺便说一句,在日期时间工作中,我们通常使用半开放式方法,其中开始是包含的,而结束是独占的。例如,一周的时间从星期一到下一个星期一,但不包括下一个星期一
对我来说,while循环比for循环更有意义
要做一些数据库工作,我们必须将java.time.LocalDate转换为java.sql.Date。有一天,JDBC驱动程序将被更新,以直接处理java.time类型,但在此之前,我们必须进行转换。查找新添加的转换方法,例如
initDate=addDaysinitDate,1??initDate=addDaysinitDate,1??