Java:列出开始日期和结束日期之间的日期

问题描述:

我试图输入开始日期,结束日期并获取其中的所有日期。我有我需要的格式,我有Joda-Time准备好去,但是...过去,我卡住了。我已经包括了我的工作内容,以及未做什么。Java:列出开始日期和结束日期之间的日期

到目前为止,我有以下代码(工作):

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
DateFormat sysDate = new SimpleDateFormat("ddMMyyyy"); 

//Get Start Date 
Date str_date = jXDatePicker1.getDate(); 
jXDatePicker1.setFormats(dateFormat); 
String startDate = sysDate.format(jXDatePicker1.getDate()); 

//Get End Date 
Date end_date = jXDatePicker2.getDate(); 
jXDatePicker2.setFormats(dateFormat); 
String endDate = sysDate.format(jXDatePicker2.getDate()); 

这里就是我想实现但没有成功:

List<LocalDate> dates = new ArrayList<LocalDate>(); 
int days = Days.daysBetween(startDate, endDate).getDays(); 
for (int i=0; i < days; i++) { 
    LocalDate d = startDate.withFieldAdded(DurationFieldType.days(), i); 
    dates.add(d); 
} 

预先感谢您。

+0

多个副本:[这里](http://*.com/q/12083053/642706)和[这里]( http://*.com/q/2689379/642706)。 –

我不知道如果int days = Days.daysBetween(startDate, endDate).getDays();将工作,假设startDateendDate仍然String小号

相反,你应该使用str_dateend_date值而不是,也许更多的东西一样......

int days = Days.daysBetween(new LocalDate(str_date), new LocalDate(end_date)).getDays(); 
System.out.println(days); 

请记住,一般来说,日期/时间的“格式”是不相关的,相反,您希望使用实际值(日期/时间)以及何时需要显示,然后根据需要进行格式设置

通常我只是不停地循环,而日期是在结束日期之前,类似...

Random rnd = new Random(); 
LocalDate start = new LocalDate(2015, DateTimeConstants.SEPTEMBER, 1); 
LocalDate end = start.plusDays(rnd.nextInt(200)); 

List<LocalDate> dates = new ArrayList<>(25); 
dates.add(start); 
while (start.isBefore(end)) { 
    start = start.plusDays(1); 
    dates.add(start); 
} 

for (LocalDate date : dates) { 
    System.out.println(date); 
} 

这是包容性的,从开始日期到结束日期和此示例只列表从开始日期的日期到未来的随机天数

+0

好的答案,但我建议将特定的['DateTimeZone'](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTimeZone.html)传递给[构造函数](http: //www.joda.org/joda-time/apidocs/org/joda/time/DateTimeZone.html)而不是隐式地依赖于JVM当前的默认时区。时区对确定日期至关重要。 –

+0

感谢您的帮助。我实际上使用了一些你的项目和一些更多的东西来获得我在这里发布的解决方案作为答案。谢谢! – FrankCapone

+0

@BasilBourque好点 – MadProgrammer

我最终以混合MadProgrammer提供的结果和我在网络上进行的一些调整来获得期望的结果。有一种可能是更好的方式来做到这一点,但这里对我来说是什么在起作用:

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
     DateFormat sysDate = new SimpleDateFormat("ddMMyyyy"); 

     //Get Start Date 
     Date str_date = jXDatePicker1.getDate(); 
     jXDatePicker1.setFormats(dateFormat); 
     String startDate = sysDate.format(jXDatePicker1.getDate()); 

     //Get End Date 
     Date end_date = jXDatePicker2.getDate(); 
     jXDatePicker2.setFormats(dateFormat); 
     String endDate = sysDate.format(jXDatePicker2.getDate()); 

     List<Date> dates = new ArrayList<Date>(25); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(str_date); 
     while (cal.getTime().before(end_date)) { 
      cal.add(Calendar.DATE, 1); 
      dates.add(cal.getTime()); 
     }  

     List<String> stringDates = new ArrayList<String>(dates.size()); 
     for (Date mdates : dates){ 
      String date = sysDate.format(mdates); 
      stringDates.add(String.valueOf(date)); 
     } 

     System.out.println(stringDates);