我正在尝试将给定月份(取自数据库)的前 12 个月放入数组列表中。
List<String> allDates = new ArrayList<String>();
sqlQuery="select max(date) from Table_Name";
maxDate="Jan-2016"; (Result from Query);
要从 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);
由于月份是从 (0 - 11) 开始编号的,所以我无法实现。 请提出一个想法来计算给定月份的前 12 个月。感谢您的帮助!
最佳答案
问题是在循环中你总是从当前日期而不是从 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);
输出
[Jan-2016, Dec-2015, Nov-2015, Oct-2015, Sep-2015, Aug-2015, Jul-2015, Jun-2015, \
May-2015, Apr-2015, Mar-2015, Feb-2015]
编辑 简短说明代码段的作用。
- 创建一个
Calendar
来自给定的maxDate
并将其分配给cal
- 添加字符串
Mon-Year
cal
中的当前日期到列表allDates
- 从日历中减去一个月
cal.add(Calendar.MONTH, -1)
- 重复第 2 步和第 3 步 12 次li>
正如 Basil 所提到的。如果要处理 allDates
中的值稍后作为 Date / Calendar
考虑不要生成介于两者之间的字符串列表。
关于java - 从给定月份计算前 12 个月 - SimpleDateFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797581/