计算给定月份的前12个月-SimpleDateFormat

Dis*_*era 2 java date simpledateformat

我正在尝试从给定的月份(从数据库中获取)将前12个月添加到arraylist中。

List<String> allDates = new ArrayList<String>();    

sqlQuery="select max(date) from Table_Name";

maxDate="Jan-2016"; (Result from Query);
Run Code Online (Sandbox Code Playgroud)

要从maxDate获得之前的12个月,我在这里使用SimpleDateFormat。

我想从给定的月份(maxDate),而不是从当前月份计算前12个月,我尝试了以下代码。

//  Parsing maxDate to an integer (say Jan-2016 = 0, Feb-2016= 1)
Date date = new SimpleDateFormat("MMM-yyyy").parse(maxDate);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int month=cal.get(Calendar.MONTH);
        System.out.println("month : "+month);

// Looping to get previous 12 months from current month.
SimpleDateFormat month_date = new SimpleDateFormat("MMM-yyyy");
          for (int i = 12; i > 0; i--) {
                Calendar calendar1 = Calendar.getInstance();
                calendar1.add(Calendar.MONTH, -i);
                String month_name1 = month_date.format(calendar1.getTime());
                allDates.add(month_name1);
            }
            System.out.println(allDates);
Run Code Online (Sandbox Code Playgroud)

由于月份是从(0-11)开始编号,因此无法实现。请提出一个想法,计算给定月份的前12个月。感谢你的帮助!

Sub*_*mal 5

问题在于,在循环中,您总是根据当前日期而不是根据计算基础maxDate

List<String> allDates = new ArrayList<>();
String maxDate = "Jan-2016";
SimpleDateFormat monthDate = new SimpleDateFormat("MMM-yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(monthDate.parse(maxDate));
for (int i = 1; i <= 12; i++) {
    String month_name1 = monthDate.format(cal.getTime());
    allDates.add(month_name1);
    cal.add(Calendar.MONTH, -1);
}
System.out.println(allDates);
Run Code Online (Sandbox Code Playgroud)

输出

[Jan-2016, Dec-2015, Nov-2015, Oct-2015, Sep-2015, Aug-2015, Jul-2015, Jun-2015, \
 May-2015, Apr-2015, Mar-2015, Feb-2015]
Run Code Online (Sandbox Code Playgroud)

编辑简短说明代码段的作用。

  1. Calendar从给定创建一个maxDate并将其分配给cal
  2. Mon-Year当前日期的字符串添加cal到列表中allDates
  3. 从日历中减去一个月 cal.add(Calendar.MONTH, -1)
  4. 重复步骤2和3. 12。

如罗勒所述。如果你要处理的值allDates以后如Date / Calendar想不产生串之间的列表。