2015-04-06 87 views
5

我需要你的幫助來獲取兩個日期之間的字符串中的月份和年份列表。用戶將在字符串格式輸入兩個日期:如何獲取兩個日期之間的月份和年份列表

String date1 ="JAN-2015"; 
String date2 ="APR-2015"; 

所以結果應該是:

  • 一月2015
  • FEB-2015
  • MAR-2015

我試過使用下面的代碼,但它給了我錯誤的結果:

List<Date> dates = new ArrayList<Date>(); 

String str_date ="JAN-2015"; 
String end_date ="APR-2015"; 

DateFormat formatter ; 

formatter = new SimpleDateFormat("MMM-yyyy"); 
Date startDate = formatter.parse(str_date); 
Date endDate = formatter.parse(end_date); 
long endTime =endDate.getTime() ; 
long curTime = startDate.getTime(); 
while (curTime <= endTime) { 
    dates.add(new Date(curTime)); 
    curTime ++; 
} 
for(int i=0;i<dates.size();i++){ 
    Date lDate =(Date)dates.get(i); 
    String ds = formatter.format(lDate);  
    System.out.println(ds); 
} 
+0

請詳細說明您獲得的結果以及您已經完成的工作以找出問題所在。 – kaylum

+0

我得到Java堆空間錯誤 – 99maas

+0

'curTime'是以毫秒爲單位的時間。這意味着一個月大約是30天×24小時×60分鐘×60秒×1000毫秒,並且每增加一個毫秒一次。 – RealSkeptic

回答

5

使用盡可能少的代碼和基本的Java庫,並獲得您要求的結果。所以你可以修改date1和date2變量。

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 

public class Main { 
    public static void main(String[] args) { 
     String date1 = "JAN-2015"; 
     String date2 = "APR-2015"; 

     DateFormat formater = new SimpleDateFormat("MMM-yyyy"); 

     Calendar beginCalendar = Calendar.getInstance(); 
     Calendar finishCalendar = Calendar.getInstance(); 

     try { 
      beginCalendar.setTime(formater.parse(date1)); 
      finishCalendar.setTime(formater.parse(date2)); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     while (beginCalendar.before(finishCalendar)) { 
      // add one month to date per loop 
      String date =  formater.format(beginCalendar.getTime()).toUpperCase(); 
      System.out.println(date); 
      beginCalendar.add(Calendar.MONTH, 1); 
     } 
    } 
} 
+0

需要注意的事項:如果您自己保存日曆實例,請確保存儲beginCalendar.clone()而不是beginCalendar本身。 – amitav13

1

如果您的Java版本是< 8,你可以按如下方式使用日曆:

private final static DateFormat formatter = new SimpleDateFormat("MMM-yyyy", Locale.ENGLISH); 

public static void main(String[] args) throws ParseException { 
    Calendar startDate = stringToCalendar("Jan-2015"); 
    Calendar endDate = stringToCalendar("Apr-2015"); 

    while (startDate.before(endDate)) { 
     System.out.println(formatter.format(startDate.getTime())); 
     startDate.add(Calendar.MONTH, 1); 
    } 
} 

private static Calendar stringToCalendar(String string) throws ParseException {  
    Date date = formatter.parse(string); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(date); 
    return calendar; 
} 

如果你對Java 8的奢侈品,則代碼變得更加簡單:

public static void main(String[] args) {   
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM-yyyy", Locale.ENGLISH); 
    YearMonth startDate = YearMonth.parse("Jan-2015", formatter); 
    YearMonth endDate = YearMonth.parse("Apr-2015", formatter); 

    while(startDate.isBefore(endDate)) { 
     System.out.println(startDate.format(formatter)); 
     startDate = startDate.plusMonths(1); 
    } 
} 
相關問題