欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

计算昨天、7天、30天的几种方法

程序员文章站 2023-02-25 15:29:09
Calendar首先我们需要知道的是,在Java中,日期有两种表示方法,Date和Calendar,Date用毫秒数表示当前时间,无法对日期进行操作,比如加一天,减一天等,而Calendar则可以对日期进行加减计算。首先来了解一下Calendar的几个方法和静态常量calendar.get(int field),获取日期中的年、月、日、时、分、秒,返回的年份不必转换,返回的月份则要加1,返回的星期时,要注意,17分别表示周一周六calendar.add(int field, int amount)...

Calendar

首先我们需要知道的是,
在Java中,日期有两种表示方法,Date和Calendar,Date用毫秒数表示当前时间,无法对日期进行操作,比如加一天,减一天等,而Calendar则可以对日期进行加减计算。

首先来了解一下Calendar的几个方法和静态常量

calendar.get(int field),获取日期中的年、月、日、时、分、秒,返回的年份不必转换,返回的月份则要加1,返回的星期时,要注意,17分别表示周一周六

calendar.add(int field, int amount),对日期进行运算操作,比如加一天,减一天等

field中可用字段如下:
Calendar.YEAR:年
Calendar.MONTH:月从0开始
Calendar.DATE:日
Calendar.HOUR:12小时
Calendar.MINUTE:当前分钟
Calendar.SECOND:当前秒
Calendar.AM_PM:0-上午;1-下午

Calendar.DAY_OF_MONTH:当天
Calendar.HOUR_OF_DAY:24小时
Calendar.DAY_OF_WEEK::1~7 星期日~星期六
Calendar.WEEK_OF_YEAR:当前年的第几周
Calendar.WEEK_OF_MONTH:当前月的星期数
Calendar.DAY_OF_WEEK_IN_MONTH:当前月中的第几个星期
Calendar.DAY_OF_YEAR:当前年的第几天

那么我们来看方法一,通过Calendar计算日期

方法一:通过Calendar计算

   public static void main(String[] args) throws Exception {


        Map<String, Date> time = getTime("1","","");
        System.out.println(time.get("start"));
        System.out.println(time.get("end"));

    }


    public static Map<String,Date> getTime(String label, String startTime, String endTime) throws Exception{


        //昨日
        if ("1".equals(label)){

            Map<String, Date> map = calcTime(-1);
            return map;

        }

        //7天
        if ("2".equals(label)){

            Map<String, Date> map = calcTime(-7);
            return map;
        }

        //30天
        if ("3".equals(label)){

            Map<String, Date> map = calcTime(-30);
            return map;
        }

        //自定义
        Map<String, Date> map = calcTime(startTime,endTime);
        return map;
    }

    //计算昨天,7天前,30天前时间
    private static Map<String,Date> calcTime(int calcTime) throws Exception {

        Map<String,Date> map = new HashMap<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date now = sdf.parse(sdf.format(new Date()));
        Date start = null;
        Date end = null;
        Calendar c = Calendar.getInstance();
        c.setTime(now);
        c.add(Calendar.DAY_OF_MONTH,-1);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
        calendar.add(Calendar.DAY_OF_MONTH,calcTime);
        start = calendar.getTime();
        end = c.getTime();

        map.put("start",start);
        map.put("end",end);

        return map;

    }

    //计算自定义时间
    private static Map<String,Date> calcTime(String startTime, String endTime) throws Exception {

        Map<String,Date> map = new HashMap<>();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date now = sdf.parse(sdf.format(new Date()));
        Date start = null;
        Date end = null;
        Calendar c = Calendar.getInstance();
        c.setTime(now);
        c.add(Calendar.DAY_OF_MONTH,-1);

        start = sdf.parse(startTime);
        end = sdf.parse(endTime);

        map.put("start",start);
        map.put("end",end);

        return map;

    }

计算昨天、7天、30天的几种方法

在做上面案例的时候,我们可以看到Calendar.DATE和Calendar.DAY_OF_MONTH的值是一样的,那么在做日期计算的时候,用这两个计算出来的日期也是一样的呐?
计算昨天、7天、30天的几种方法
改变一下,做个测试,
计算昨天、7天、30天的几种方法

计算昨天、7天、30天的几种方法
由此我们可以认为,Calendar.DATE和Calendar.DAY_OF_MONTH的值是一样的,那么在做日期计算的时候,用这两个计算出来的日期也是一样的

方法二:DateUtils、DateFormatUtils进行转换

使用org.apache.commons.lang3.time包下的DateUtils和DateFormatUtils进行转换,太舒服了,几行代码就搞定,不用过多忧愁,简洁明了,强烈推荐

public static void main(String[] args) throws Exception {

        Map<String, Date> stringDateMap = getTime("1", "", "");

        System.out.println(stringDateMap.get("start"));
        System.out.println(stringDateMap.get("end"));


    }


    public static Map<String,Date> getTime(String label, String startTime, String endTime) throws Exception{


        //昨日
        if ("1".equals(label)){

            Map<String, Date> map = calcTimeWithDateUtils(-1);
            return map;

        }

        //7天
        if ("2".equals(label)){

            Map<String, Date> map = calcTimeWithDateUtils(-7);
            return map;
        }

        //30天
        if ("3".equals(label)){

            Map<String, Date> map = calcTimeWithDateUtils(-30);
            return map;
        }

        //自定义
        Map<String, Date> map = calcTimeWithDateUtils(startTime,endTime);
        return map;
    }

    //计算昨天,7天前,30天前时间
    private static Map<String,Date> calcTimeWithDateUtils(int calcTime) throws Exception {

        Map<String,Date> map = new HashMap<>();
        Date start = null;
        Date end = null;

        String dateFormat = DateFormatUtils.format(new Date(), "yyyy-MM-dd");

        Date now = DateUtils.parseDate(dateFormat, "yyyy-MM-dd");

        start = DateUtils.addDays(now,calcTime);
        end = DateUtils.addDays(now,-1);

        map.put("start",start);
        map.put("end",end);

        return map;

    }

    //计算自定义时间
    private static Map<String,Date> calcTimeWithDateUtils(String startTime, String endTime) throws Exception {

        Map<String,Date> map = new HashMap<>();
        Date start = null;
        Date end = null;

        start = DateUtils.parseDate(startTime);
        end = DateUtils.parseDate(endTime);

        map.put("start",start);
        map.put("end",end);

        return map;
        

    }

结果一样
计算昨天、7天、30天的几种方法

本文地址:https://blog.csdn.net/weixin_40598838/article/details/109620317

相关标签: java