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

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计算日期

方法一:使用LocalDateTime的使用

 public class DateUtil {

    private final static Map<String,String> map = new HashMap<>();

    public static String getStartTime(String dateIdentity){

        setDateTimeValue();
        return map.get(dateIdentity);

    }

    private static void  setDateTimeValue(){

        LocalDate localDate = LocalDate.now();

        LocalDate startTime = localDate.minusDays(7);

        map.put("0",startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

        startTime = localDate.minusDays(14);

        map.put("1",startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

        startTime = localDate.minusDays(30);

        map.put("2",startTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

    }

}

方法二: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;
        

    }

结果一样
在这里插入图片描述

方法三:通过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;

    }

在这里插入图片描述

在做上面案例的时候,我们可以看到Calendar.DATE和Calendar.DAY_OF_MONTH的值是一样的,那么在做日期计算的时候,用这两个计算出来的日期也是一样的呐?
在这里插入图片描述
改变一下,做个测试,
在这里插入图片描述

在这里插入图片描述
由此我们可以认为,Calendar.DATE和Calendar.DAY_OF_MONTH的值是一样的,那么在做日期计算的时候,用这两个计算出来的日期也是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值