如何获得月份清单;两个日期之间的年份

时间:2015-04-06 20:51:39

标签: java date

我需要你的帮助才能在两个日期之间获得字符串中的月份和年份列表。用户将以String格式输入两个日期:

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);
}

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:2)

如果你的Java版本是&lt; 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);
    }
}
相关问题