1、在做项目开发的时候可能会遇到通过进行时间筛选来获取到相应的数据,如果是两个时间运算当然好运算了,可是如果是一个是整形一个是时间类型呢?下面有一个工具类,是博主自己写的,如果有需要,可以直接拿来用
package com.mc.web.application.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* @Author: mcxw
* @Date: 2018-11-08
* @Descripion
**/
public class DateUtil {
/**
* 通过传入天数来获得之前的时间
* 比如今天2018-12-26 传入3天前 可以获得2018-12-24
* 要求必须是30天之前,不然会报错
* */
public static String time(int times){
String nowTime ="";
//获取到当天的时间
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String todayTime = sdf.format(date);
//获取到当天的“日”
int day = Integer.valueOf(todayTime.substring(8, 10));
//将当前的“日”和传过来的“天数”进行相减
int chooseDay = 0;
chooseDay = day - times+1;
//年
int year = Integer.valueOf(todayTime.substring(0,4));
//月
int month = Integer.valueOf(todayTime.substring(5, 7));//获取到月的日期
//获取到时分秒
String hms = todayTime.substring(11,todayTime.length());
if (chooseDay < 0) {//如果相减以后小于零,就要对月进行处理
int n = 0;
//判断上一个月是30天还是31天
switch (month) {
case 1:
year=year-1;//2019变成了2018
month =12;//月份为12月份
day = day + 31;//天数
chooseDay = day-times+1;//包含了今天,要+1
break;
case 3:
month = month-1;
day = day + 31;
chooseDay = day-times+1;
break;
case 5:
month = month-1;
day = day + 31;
chooseDay = day-times+1;
break;
case 7:
month = month-1;
day = day + 31;
chooseDay = day-times+1;
break;
case 8:
month = month-1;
day = day + 31;
chooseDay = day-times+1;
break;
case 10:
month = month-1;
day = day + 31;
chooseDay = day-times+1;
break;
case 12:
month = month-1;
day = day + 31;
chooseDay = day-times+1;
break;
//对于2月份需要判断是否为闰年
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
month = month-1;
day = day + 29;
chooseDay = day-times;//比如在3月1号的时候选
if(chooseDay == 0){
chooseDay = 29;//跳回到29号
}
break;
} else {
month = month-1;
day = day + 28;
chooseDay = day-times;//比如在3月1号或者3月2号的时候的时候选
if (chooseDay == 0 || chooseDay == -1){
chooseDay = 28;
}
break;
}
case 4: day = day + 30; month = month-1; chooseDay = day-times+1;break;
case 6: day = day + 30; month = month-1; chooseDay = day-times+1;break;
case 9: day = day + 30;month = month-1;chooseDay = day-times+1; break;
case 11: day = day + 30; month = month-1;chooseDay = day-times+1; break;
default:
return "输入的天数必须是30天之前";
}
//最后输出时间
System.out.println("传入过去的时间为"+nowTime);
nowTime = ""+year+"-"+month+"-"+chooseDay+" "+hms;
}else{
nowTime = ""+year+"-"+month+"-"+chooseDay+" "+hms;
}
return nowTime;
}
}
思路:1、获取到当前的时间,然后将时间转成字符串,之后,截取当前的“日”
2、与你传过来的“日”(参数)进行计算,有一点要注意,月份不同,天数有时会不同,所以,可以利用switch来进行判断 月份,同时也要注意判断2月份是否为闰年,最后进行计算。
3、最后,对时间进行拼接,就是你传入天数后计算出来的时间。
注意:如果你不想包含今天,那么在计算天数的时候要把“+1”给去掉,比如今天是12月30号,你想看三天前的,不包含今天的,那么时间段为12月26日至12月29日。