繁体   English   中英

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

[英]How to get list of months & years between two dates

我需要你的帮助,在两个日期之间获取字符串中的月份和年份列表。 用户将以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);
}

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

如果您的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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM