在开发中经常会遇到操作时间类的业务,虽然代码部分并不算难,但为了今后查找和使用方便,现将常用的几种操作时间的工具类代码予以罗列,以便今后参考;
下面直接上代码,难度不大,诸位小伙伴可自行参考,酌情使用,
public class TimeUtils {
public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final String MINUTE_PATTERN = "yyyy-MM-dd HH:mm";
public static final String HOUR_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final String DATE_PATTERN = "yyyy-MM-dd";
public static final String MONTH_PATTERN = "yyyy-MM";
public static final String YEAR_PATTERN = "yyyy";
public static final String MINUTE_ONLY_PATTERN = "mm";
public static final String HOUR_ONLY_PATTERN = "HH";
/**
* @param date
* @param pattern
* @return
*/
public static String dateFormatStr(Date date, String pattern) {
if (StringUtils.isEmpty(pattern)) {
pattern = TimeUtils.DATE_TIME_PATTERN;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* 字符串转化为时间对象
*
* @param dateTimeString
* @param pattern
* @return
* @throws ParseException
*/
public static Date strToDate(String dateTimeString, String pattern) throws ParseException {
if (StringUtils.isEmpty(pattern)) {
pattern = TimeUtils.MINUTE_PATTERN;
}
if (dateTimeString == null || dateTimeString == "") {
System.out.println("传入的时间字符串参数不能为空");
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
Date date = sdf.parse(dateTimeString);
return date;
}
// 日期时间格式转化为日期对象
public static Date dateTimeToDate(Date dateTime) throws Exception {
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateTime);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 小时数量相加
*
* @param dateStr
* @param addHour
* @return
*/
public static Date dateAddHours(Date dateStr, int addHour) {
if (StringUtils.isEmpty(dateStr)) {
System.out.println("传入的时间不能为空");
}
if (addHour == 0) {
System.out.println("时间加数不能为0");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateStr);
calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) + addHour);
return calendar.getTime();
}
/**
* 天数相加
*
* @param dateStr
* @param days
* @return
*/
public static Date dateAddDay(Date dateStr, int days) {
if (StringUtils.isEmpty(dateStr)) {
System.out.println("传入的时间不能为空");
}
if (StringUtils.isEmpty(days) || days == 0) {
System.out.println("传入的天数不能为");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateStr);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + days);
return calendar.getTime();
}
/**
* 分相加
*
* @param dateStr
* @param minutes
* @return
*/
public static Date dateMinuteAdd(Date dateStr, int minutes) {
if (StringUtils.isEmpty(dateStr)) {
System.out.println("传入的时间不能为空");
}
if (StringUtils.isEmpty(minutes) || minutes == 0) {
System.out.println("传入的加数不能为空");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(dateStr);
calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + minutes);
return calendar.getTime();
}
/**
* 两个时间比较
*
* @param mydate
* @param comparedate
* @return
*/
public static int dateCompare(Date mydate, Date comparedate) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.setTime(mydate);
calendar2.setTime(comparedate);
return calendar1.compareTo(calendar2);
}
/**
* 获取两个时间中比较小的一个
*
* @param date1
* @param date2
* @return
*/
public static Date dateMin(Date date1, Date date2) {
if (date1 == null) {
return date2;
}
if (date2 == null) {
return date1;
}
if (1 == TimeUtils.dateCompare(date1, date2)) {
return date2;
} else if (-1 == TimeUtils.dateCompare(date1, date2)) {
return date1;
}
return date1;
}
/**
* 获取两个时间中比较小的一个
*
* @param date1
* @param date2
* @return
*/
public static Date dateMax(Date date1, Date date2) {
if (date1 == null) {
return date2;
}
if (date2 == null) {
return date1;
}
if (1 == TimeUtils.dateCompare(date1, date2)) {
return date1;
} else if (-1 == TimeUtils.dateCompare(date1, date2)) {
return date2;
}
return date1;
}
/**
* 获取给定日期的年份
*
* @param date
* @return
*/
public static int getDateOfYear(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.YEAR);
}
/**
* 获取给定日期的月份数
*
* @param date
* @return
*/
public static int getMonthOfDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.MONTH);
}
/**
* 获取日期时间当年的总天数,如201-09-12,返回2018年的总天数
*
* @param date
* @return
*/
public static int getDaysOfYear(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getActualMaximum(Calendar.DAY_OF_YEAR);
}
@Test
public void testAllDays(){
Date date = new Date();
int dayas = TimeUtils.getDaysOfYear(date);
System.out.println(dayas);
}
@Test
public void testCompareTime() throws Exception {
Date date1 = new Date();
Thread.sleep(5000);
Date date2 = new Date();
System.out.println(TimeUtils.dateCompare(date2, date1));
}
public static void main(String[] args) throws Exception {
Date date = new Date();
int addHour = 3;
System.out.println("现在的时间点是:" + date.getHours());
Date date2 = TimeUtils.dateAddHours(date, addHour);
System.out.println("相加后的时间是 : " + date2.getHours());
}
@Test
public void test1() throws ParseException {
String pattern = "";
// String dateTimeString = "2018-09-13 13:33:52";
String dateTimeString = "";
Date date = TimeUtils.strToDate(dateTimeString, pattern);
System.out.println(date.toString());
}
@Test
public void testAddDay() {
Date date = new Date();
int days = 2;
System.out.println("原来的天数为:" + date.getDay());
Date date2 = TimeUtils.dateAddDay(date, days);
System.out.println("现在的天数为:" + date2.getDay());
}
@Test
public void testAddMinute() {
Date date = new Date();
int minutes = 10;
System.out.println("相加前的时间是:" + date.getMinutes());
Date date2 = TimeUtils.dateMinuteAdd(date, minutes);
System.out.println("相加后的时间是 : " + date2.getMinutes());
}
}
代码里面想要说明的一点是,在实际开发中,单纯的对日期时间做处理是不能满足业务需求的,比如有这样一个需求,给定了两个时间段,需要查询这个时间段内所有的订单数量,精确到天,这种情况下,除了需要对日期做格式的转换,还需要对时间做加减的操作,也就需要JDK的calendar工具包一起配合使用才能达到效果,关于calendar的使用,大家可以参考相关的材料,使用得当,可以收到奇效。