计算昨天、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<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的值是一样的,那么在做日期计算的时候,用这两个计算出来的日期也是一样的
方法二: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;
}
结果一样
本文地址:https://blog.csdn.net/weixin_40598838/article/details/109620317