如何获取两个日期之间的月份和年份列表

10

我需要您帮助获取两个日期之间的月份和年份列表。用户将以字符串格式输入两个日期:

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

所以结果应该是:

  • 2015年1月
  • 2015年2月
  • 2015年3月

我尝试使用以下代码,但它给出了错误的结果:

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

请提供您所获得的结果细节以及您尝试查找问题所做的工作。 - kaylum
我得到了Java堆空间错误。 - 99maas
curTime жҳҜд»ҘжҜ«з§’дёәеҚ•дҪҚзҡ„ж—¶й—ҙгҖӮиҝҷж„Ҹе‘ізқҖдёҖдёӘжңҲеӨ§зәҰжҳҜ30еӨ©Г—24е°Ҹж—¶Г—60еҲҶй’ҹГ—60з§’Г—1000жҜ«з§’пјҢиҖҢжӮЁжҜҸж¬Ўиҝӯд»ЈйғҪдјҡе°Ҷе…¶еўһеҠ дёҖжҜ«з§’гҖӮ - RealSkeptic
那么我应该在哪里添加上述计算? - 99maas
1
如果您正在使用Java 8,则应使用java.time包,而不是Date,并使用LocalDate。如果没有,您应该下载Joda Time并使用它。您还可以使用Calendar对象并设置month字段来完成此操作。 - RealSkeptic
显示剩余2条评论
2个回答

16

使用尽可能少的代码和基本的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);
        }
    }
}

需要注意的是:如果你要保存日历实例本身,请确保存储的是beginCalendar.clone()而不是beginCalendar本身。 - amitavk

8
如果您的Java版本小于8,则可以按照以下方式使用日历(Calendar):
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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接