java两个日期比较30天_计算昨天、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计算日期

方法一:通过Calendar计算

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

Map time = getTime("1","","");

System.out.println(time.get("start"));

System.out.println(time.get("end"));

}

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

//昨日

if ("1".equals(label)){

Map map = calcTime(-1);

return map;

}

//7天

if ("2".equals(label)){

Map map = calcTime(-7);

return map;

}

//30天

if ("3".equals(label)){

Map map = calcTime(-30);

return map;

}

//自定义

Map map = calcTime(startTime,endTime);

return map;

}

//计算昨天,7天前,30天前时间

private static Map calcTime(int calcTime) throws Exception {

Map 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 calcTime(String startTime, String endTime) throws Exception {

Map 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;

}

58c571f6121d959b0b4d38958afa0001.png

在做上面案例的时候,我们可以看到Calendar.DATE和Calendar.DAY_OF_MONTH的值是一样的,那么在做日期计算的时候,用这两个计算出来的日期也是一样的呐?

f12a1d58e5421d323b45226a2bd1c744.png

改变一下,做个测试,

cd8549bbd7956996e5682b4664aeaf5a.png

9f2d039d04abf76c638f5f386d6181b1.png

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

方法二:DateUtils、DateFormatUtils进行转换

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

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

Map stringDateMap = getTime("1", "", "");

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

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

}

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

//昨日

if ("1".equals(label)){

Map map = calcTimeWithDateUtils(-1);

return map;

}

//7天

if ("2".equals(label)){

Map map = calcTimeWithDateUtils(-7);

return map;

}

//30天

if ("3".equals(label)){

Map map = calcTimeWithDateUtils(-30);

return map;

}

//自定义

Map map = calcTimeWithDateUtils(startTime,endTime);

return map;

}

//计算昨天,7天前,30天前时间

private static Map calcTimeWithDateUtils(int calcTime) throws Exception {

Map 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 calcTimeWithDateUtils(String startTime, String endTime) throws Exception {

Map 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;

}

结果一样

9f2d039d04abf76c638f5f386d6181b1.png

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

希望与广大网友互动??

点此进行留言吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值