zoukankan      html  css  js  c++  java
  • java.util.Calendar获取时间区间问题

    虽然java8的LocalDate已经出来,但是很多项目以及自己习惯上还是使用Date,这里还是简单介绍一下如何通过java.util.Calendar获取时间区间.

    1 通过calendar.getActualMinimum,getActualMaximum获取周,月,年的最大值,最小值

     1     /**
     2      * @Title: getSeasonFrist
     3      * @Description: 获取季度初日期
     4      * @param calendar
     5      * @return
     6      * @throws ParseException
     7      */
     8     public static String getSeasonFrist(Calendar calendar) throws ParseException {
     9         int month = calendar.get(Calendar.MONTH);
    10         int season = getSeason(month, 0);
    11         calendar.set(Calendar.DAY_OF_MONTH, 0);
    12         calendar.set(Calendar.MONTH, season);
    13         calendar.add(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
    14         return sdf.format(calendar.getTime());
    15     }
    16 
    17     /**
    18      * @Title: getSeasonLast
    19      * @Description: 获取季度末日期时间
    20      * @param calendar
    21      * @return
    22      * @throws ParseException
    23      */
    24     public static String getSeasonLast(Calendar calendar) throws ParseException {
    25         int month = calendar.get(Calendar.MONTH);
    26         int season = getSeason(month, 1);
    27         calendar.set(Calendar.MONTH, season);
    28         calendar.set(Calendar.DAY_OF_MONTH, -1);
    29         calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
    30         return sdf.format(calendar.getTime());
    31     }

    问题,因为直接设置月份,除了月份其他信息没有改,会造成获取月份最大值不准确,即当前月是9月,我把月份改成10,但是9月的最大天数是30,所以获取月份最后一天就是:10月30日

    方式二:通过获取下月月初减一的方式获取区间最后一天,这种方式可简单有效解决月末日期不准确问题

     1     /**
     2      * @Title: getSeasonFrist
     3      * @Description: 获取季度初日期
     4      * @param calendar
     5      * @return
     6      * @throws ParseException
     7      */
     8     public static String getSeasonFrist(Calendar calendar) throws ParseException {
     9         int month = calendar.get(Calendar.MONTH);
    10         int season = getSeason(month, 0);
    11         calendar.set(Calendar.MONTH, season);
    12         calendar.set(Calendar.DAY_OF_MONTH, 1);
    13         return sdf.format(calendar.getTime());
    14     }
    15 
    16     /**
    17      * @Title: getSeasonLast
    18      * @Description: 获取季度末日期时间
    19      * @param calendar
    20      * @return
    21      * @throws ParseException
    22      */
    23     public static String getSeasonLast(Calendar calendar) throws ParseException {
    24         int month = calendar.get(Calendar.MONTH);
    25         int season = getSeason(month, 1);
    26         calendar.set(Calendar.MONTH, season + 1);
    27         calendar.set(Calendar.DAY_OF_MONTH, 0);
    28         return sdf.format(calendar.getTime());
    29     }

    这里用季度的例子举例,月和年类似;因为calendar没有直接获取季度的方法,季度的区间需要自己定义,其实就是获取当前月,然后自己定义每个月属于哪个季度,并返回季度首尾的月份;

  • 相关阅读:
    阿里云oss前端javascript签名上传爬坑手册
    关于文件上传获取视频播放时长
    用js获取视频播放时长
    关于文件上传阿里云Oss
    两种方式实现图片上传在线预览
    关于input file img实时预览获取文件路径的问题
    关于input file 改样式的操作方式
    关于jquery attr()与prop() 的区别
    弹窗确认操作的业务逻辑与几种方式
    [LintCode] Flip Bits
  • 原文地址:https://www.cnblogs.com/chengmuyu/p/7691979.html
Copyright © 2011-2022 走看看