java - 从给定月份计算前 12 个月 - SimpleDateFormat

标签 java date simpledateformat

我正在尝试将给定月份(取自数据库)的前 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]

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

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

正如 Basil 所提到的。如果要处理 allDates 中的值稍后作为 Date / Calendar考虑不要生成介于两者之间的字符串列表。

关于java - 从给定月份计算前 12 个月 - SimpleDateFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35797581/

相关文章:

java - 为什么我的递归方法中的结果字符串没有更新?

java - 将消息转换为作业,使其与批处理进行 Spring 集成

javascript - Moment.js 比较两个日期抛出警告

javascript - Chrome 和 Firefox 之间的时间戳转换差异

java - SimpleDateFormat 在日期格式期间错误地向前滚动一年

java - BufferedReader 在读取 Json 数据时

java - POST 到 HTTPS 服务

java - 如何获取日历中选定的日期?

java - 无法识别具有偏移量的 SimpleDateFormat

java - 将时间戳保存到数据库时出现错误时间戳格式必须为 yyyy-mm-dd hh :mm:ss[. fffffffff]