zoukankan      html  css  js  c++  java
  • 计算过去的最近几个月

    遇到个需求就是计算过去的6个月是哪几个月 开始随便从网上找了个,  

      public static String[] getLastMonths(Calendar theCal) {
        String[] lastMonths = new String[6];
        Calendar cal = theCal;//Calendar.getInstance();
        cal.set(Calendar.MONTH, cal.MONTH); //要先+1,才能把本月的算进去
        
        for(int i=0; i<6; i++){
          cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)-1); //逐次往前推1个月
          String t = cal.get(Calendar.YEAR)+ "-" + fillZero((cal.get(Calendar.MONTH)+1), 2);
          
          lastMonths[5-i] = t.replace("-", "");
        }
        
        return lastMonths;
      }
    

    但是运行时候出现了连续的问题,输入为201908时,会输出 201907 201907 201906 201905 201904 201903

    或者 201907 201906 201905 201904 201904 201903

    后来又写了个:

    正确的月份-1

      public static String[] getLastMonths(Calendar theCal) {
        String[] lastMonths = new String[6];
        Calendar cal = theCal;//Calendar.getInstance();
        cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)); //要先+1,才能把本月的算进去
        
        for(int i=0; i<6; i++){
          cal.add(Calendar.MONTH, -1); //逐次往前推1个月
          String t = cal.get(Calendar.YEAR)+ "-" + fillZero((cal.get(Calendar.MONTH)+1), 2);
          
          lastMonths[5-i] = t.replace("-", "");
        }
        
        return lastMonths;
      }
    

     开始怀疑是cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)-1);的初始化有问题,老是慢一拍,感觉有的时候这个-1并不能正常执行,就开始向下执行了,

    看了源代码之后能看到:

    add():就是咱们理解的4月1日减一天是三月31日,

        public abstract void add(int field, int value);
        -第一个参数 field 表示日历字段 即:年 月 日
        -第二个参数 value 表示该字段值的 变化的量
        如:field如果是月,value值为3 ,就表示当前日期加上3个月。

    set();

    public void set(int field,int value)
        -field 被改变的字段
        -value 该值被直接赋值与上面的日历字段
        如:field如果是日,value值为1 ,就表示设置当前日期为1号。

    -set 表示直接设值 不考虑原来的时间值
    -add 表示在原有的基础上进行加减value

    calendar.add(Calendar.DAY_OF_MONTH, 2);//表示在默认的当前日期上加两天
    calendar.set(Calendar.DAY_OF_MONTH,2);//表示直接将日期设置为本月2号

  • 相关阅读:
    Extjs 集合了1713个icon图标的CSS文件
    Sencha Touch 2 DataView / List 分页
    Sencha Touch 笔记
    [奉献]通过命令快速启动应用程序的小软件(QuickLauncher V1.1)
    PTC FlexPLM rfa 接口自动创建产品规格
    Excel Vba 调用WebService的两种方式,解决MSSOAP30 64位不兼容问题
    Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
    C#获取远程图片,需要Form用户名和密码的Authorization认证
    [转]plsql不安装oracle客户端 进行远程连接
    WPF、Silverlight程序编码资料收集
  • 原文地址:https://www.cnblogs.com/1394htw/p/11407167.html
Copyright © 2011-2022 走看看