整理出常用的一些日期转换及日期计算比较等, 部分通用方法未全部列出, 若有遗漏后续会不断更新.
亲测可用
package com.lx.benefits.bean.dto.yx.utils;
import com.apollo.common.enums.base.DatePatternEnum;
import com.apollo.common.exception.BusinessException;
import com.apollo.common.response.enums.CommonMsgEnum;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtils1 {
private static Logger logger = LoggerFactory.getLogger(DateUtils1.class);
public static final String DATETIMEFORMAT = "yyyyMMddHHmmss";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final long DAY_MILLIS = 24 * 60 * 60 * 1000;
public static final long HOUR_MILLIS = 60 * 60 * 1000;
public static final long MINUTE_MILLIS = 60 * 1000;
/**
* 将[日期]按照给定的[日期格式]转成[字符串]
*
* @param date 日期
* @param format 日期格式
* @return
*/
public static String parseDateToString(Date date, String format) {
if (date == null) {
return null;
}
if (StringUtils.isEmpty(format)) {
format = DATE_TIME_FORMAT;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 将[时间]按照指定的[日期格式]转成[字符串]
*
* @param time 时间
* @param format 日期格式
* @return
*/
public static String parseLongToString(long time, String format) {
SimpleDateFormat mydate = new SimpleDateFormat(format);
return mydate.format(new Date(time));
}
/**
* 将[字符串]按照指定的[日期格式]转成[时间]
*
* @param time 字符串
* @param format 日期格式
* @return
*/
public static long parseStringToLong(String time, String format) {
SimpleDateFormat mydate = new SimpleDateFormat(format);
try {
Date date = mydate.parse(time);
if (date != null) {
return date.getTime();
}
} catch (ParseException e) {
logger.error("Date parse error:", e);
}
return 0;
}
/**
* 将[字符串]按照指定的[日期格式]转成[日期]
* @param strDate 字符串
* @param format 日期格式
* @return
*/
public static Date parseStrToDate(String strDate,String format) {
if (StringUtils.isEmpty(strDate)) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(format);
try {
Date date = sdf.parse(strDate);
if (date != null) {
return date;
}
return null;
} catch (ParseException e) {
throw new BusinessException(CommonMsgEnum.DATE_TRANSFER_ERROR.getCodeMsg());
}
}
/**
* 减去天数(负数为添加)
* @param d
* @param day
* @return
*/
public static Date getDateBefore(Date d, int day) {
Calendar now = Calendar.getInstance();
now.setTime(d);
now.set(Calendar.DATE, now.get(Calendar.DATE) - day);
return now.getTime();
}
/**
* 添加天数(负数为减)
* @param date 日期
* @param amount 增加天数
* @return
*/
public static Date addDay(Date date, int amount) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, amount);
return calendar.getTime();
}
/**
* 得到几个小时之前的时间
* @param hour 正数为几小时之钱,负数为几小时之后
* @return
*/
public static Date getSomeHourBefore(Date date, int hour) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - hour);
return calendar.getTime();
}
/**
* 得到前后几分钟的时间
* @param mins 正数为几分钟之后,负数为几分钟之前
* @return
*/
public static Date getSomeMinsBefore(Date date, int mins) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MINUTE, mins);
return calendar.getTime();
}
/**
* 获取半小时前的时间
* @param d 时间
*/
public static Date getHalfHourBefore(Date d) {
if (d == null) {
return null;
}
long timestamp = d.getTime();
timestamp -= 1000 * 60 * 30;
return new Date(timestamp);
}
/**
* 获取半小时后的时间
* @param d 时间
*/
public static Date getHalfHourAfter(Date d) {
if (d == null) {
return null;
}
long timestamp = d.getTime();
timestamp += 1000 * 60 * 30;
return new Date(timestamp);
}
/**
* 获取一周的第一天
* @param day
* @return
*/
public static Date getWeekStart(Date day) {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(day);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek());
return calendar.getTime();
}
/**
* 获取一周的最后一天
* @param day
* @return
*/
public static Date getWeekEnd(Date day) {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(day);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
calendar.set(Calendar.DAY_OF_WEEK, calendar.getFirstDayOfWeek() + 6);
return calendar.getTime();
}
/**
* 获取一个月的第一天
* @param day
* @return
*/
public static Date getFirstDayOfMonth(Date day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
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 day
* @return
*/
public static Date getLastDayOfMonth(Date day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(day);
calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), 1);
calendar.roll(Calendar.DATE, -1);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 获取某天的开始时间
* @param date 日期
*/
public static Date getStartTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
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 date 日期
*/
public static Date getEndTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 判断是否是同一天
* @param day1
* @param day2
* @return
*/
public static boolean isSameDay(Date day1, Date day2) {
SimpleDateFormat sdf = new SimpleDateFormat(DatePatternEnum.Y_M_D.getPattern());
String ds1 = sdf.format(day1);
String ds2 = sdf.format(day2);
return ds1.equals(ds2);
}
/**
* 日期间隔天数
* @param startDateStr
* @param endDateStr
* @return
*/
public static int daysBetween(String startDateStr, String endDateStr) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(DatePatternEnum.Y_M_D.getPattern());
Date startDate = sdf.parse(startDateStr);
Date endDate = sdf.parse(endDateStr);
Calendar cal = Calendar.getInstance();
cal.setTime(startDate);
long time1 = cal.getTimeInMillis();
cal.setTime(endDate);
long time2 = cal.getTimeInMillis();
long between_days = (time2 - time1) / (1000 * 3600 * 24);
return Integer.parseInt(String.valueOf(between_days));
} catch (ParseException e) {
throw new BusinessException(CommonMsgEnum.DATE_TRANSFER_ERROR.getCodeMsg());
}
}
/**
* 日期相差毫秒数
* @param startDate
* @param endDate
* @return
*/
public static long getTimeDiff(Date startDate, Date endDate) {
long startTime = startDate.getTime();
long endTime = endDate.getTime();
return (endTime - startTime);
}
/**
* 字符串日期相差毫秒数
* @param startDate
* @param endDate
* @return
*/
public static long getTimeDiff(String startDate, String endDate) {
return getTimeDiff(parseStrToDate(startDate,DatePatternEnum.Y_M_D_SPACE_H_M_S.getPattern()), parseStrToDate(endDate,DatePatternEnum.Y_M_D_SPACE_H_M_S.getPattern()));
}
/**
* 计算两个字符日期之间小时分钟差00.00
* @param time1
* @param time2
* @return
*/
public static String getTimeDifference(String time1, String time2) {
SimpleDateFormat sdf = new SimpleDateFormat(DatePatternEnum.Y_M_D_SPACE_H_M_S.getPattern());
long t1;
try {
t1 = sdf.parse(time1).getTime();
long t2 = sdf.parse(time2).getTime();
long diff = t2 - t1;
long h = diff / (1000 * 60 * 60);
long dm = diff % (1000 * 60 * 60);
long min = dm / (1000 * 60);
if (min == 0) {
return h + ":00";
}
if (min < 10) {
return h + ":0" + min;
}
return h + ":" + min;
} catch (ParseException e) {
return "";
}
}
/**
* 判断是否一周的星期几
* @param date
* @return
*/
public static boolean checkDayOfWeek(Date date,int dayOfWeek){
Calendar cal = Calendar.getInstance();
cal.setTime( date );
if(cal.get(Calendar.DAY_OF_WEEK)==dayOfWeek ) {
return true;
}
return false;
}
}