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没有直接获取季度的方法,季度的区间需要自己定义,其实就是获取当前月,然后自己定义每个月属于哪个季度,并返回季度首尾的月份;

  • 相关阅读:
    数组名和指针区别(还有数组退化等)
    无法从“const char *”转换为“char *”
    c语言数组初始化问题
    c语言实现atoi和itoa函数。
    不使用临时变量交换两个整数
    hdu 1282回文数猜想
    Android仿WIN8系统磁贴点击下沉倾斜效果
    Android Studio使用心得
    处理json中影响解析的多余引號
    我也来开发2048之主界面设计
  • 原文地址:https://www.cnblogs.com/chengmuyu/p/7691979.html
Copyright © 2011-2022 走看看