2015-09-05 147 views
2

我試圖輸入開始日期,結束日期並獲取其中的所有日期。我有我需要的格式,我有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://stackoverflow.com/q/12083053/642706)和[這裏]( http://stackoverflow.com/q/2689379/642706)。 –

回答

1

我不知道如果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

0

我最終以混合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); 
相關問題