版权声明:博客原创,转载须标明出处 https://blog.csdn.net/qq_24232123/article/details/77164557
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 日期工具类
*/
public class DateUtil {
/**
* 日期格式常量类:yyyy-MM-dd
*/
private static final String YYYY_MM_DD = "yyyy-MM-dd";
/**
* 日期格式常量类:yyyy-MM-dd HH:mm:ss
*/
public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
private final SimpleDateFormat format;
public DateUtil(SimpleDateFormat format) {
this.format = format;
}
public SimpleDateFormat getFormat() {
return format;
}
//紧凑型日期格式,也就是纯数字类型yyyyMMdd
public static final DateUtil COMPAT = new DateUtil(new SimpleDateFormat("yyyyMMdd"));
//常用日期格式,yyyy-MM-dd
public static final DateUtil COMMON = new DateUtil(new SimpleDateFormat("yyyy-MM-dd"));
public static final DateUtil COMMON_FULL = new DateUtil(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
//使用斜线分隔的,西方多采用,yyyy/MM/dd
public static final DateUtil SLASH = new DateUtil(new SimpleDateFormat("yyyy/MM/dd"));
//中文日期格式常用,yyyy年MM月dd日
public static final DateUtil CHINESE = new DateUtil(new SimpleDateFormat("yyyy年MM月dd日"));
public static final DateUtil CHINESE_FULL = new DateUtil(new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒"));
/**
* 日期获取字符串
*/
public String getDateText(Date date) {
return getFormat().format(date);
}
/**
* 字符串获取日期
*
* @throws ParseException
*/
public Date getTextDate(String text) throws ParseException {
return getFormat().parse(text);
}
/**
* 日期获取字符串
*/
public static String getDateText(Date date, String format) {
return new SimpleDateFormat(format).format(date);
}
/**
* 字符串获取日期
*
* @throws ParseException
*/
public static Date getTextDate(String dateText, String format) throws ParseException {
return new SimpleDateFormat(format).parse(dateText);
}
/**
* 根据日期,返回其星期数,周一为1,周日为7
*
* @param date
* @return
*/
public static int getWeekDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int w = calendar.get(Calendar.DAY_OF_WEEK);
int ret;
if (w == Calendar.SUNDAY)
ret = 7;
else
ret = w - 1;
return ret;
}
/**
* 获取当天开始 LONG
* @return
*/
public static Long getStartTime(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
Date date=calendar.getTime();
return date.getTime();
}
/**
* 获取当天结束 LONG
* @return
*/
public static Long getEndTime(){
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
Date date=calendar.getTime();
return date.getTime();
}
/**
* 字串转化成日期
*
* @param date 传入日期
* @param pattern 转换格式
* @return 转化结果
*/
public static Date strToDate(String date, String pattern) {
if (date == null || pattern == null){
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
return sdf.parse(date);
}
catch (ParseException e) {
throw new RuntimeException(e);
}
}
/**
* 日期转化为字串
*
* @param date 传入日期
* @param pattern 格式
* @return 转化结果
*/
public static String dateToStr(Date date, String pattern) {
if (date == null || pattern == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* 日期时间转化为字串yyyy-MM-dd HH:mm:SS
*
* @param date 传入日期
* @return 转化结果
*/
public static String dateTimeToStr(Date date) {
return dateToStr(date, YYYY_MM_DD_HH_MM_SS);
}
/**
* 把日期转化成"yyyy-MM-dd"格式的字串
*
* @param date 传入日期
* @return 转化结果
*/
public static String dateToStr(Date date) {
return dateToStr(date, YYYY_MM_DD);
}
/**
* 把日期加天数
*
* @param date 需要处理日期
* @param day 增加天数
* @return Date
*/
public static Date addDay(Date date, int day) {
if (date == null) {
return null;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, day);
return calendar.getTime();
}
/**
* 把日期转成日期想要的格式
*
* @param date 传入日期
* @param pattern 日期格式
* @return 转化结果
*/
public static Date dateToDatePattern(Date date, String pattern) {
String dateStr = dateToStr(date, pattern);
return strToDate(dateStr, pattern);
}
/**
* 返回两个日期之间的天数差
*
* @param d1 第一个日期
* @param d2 第二个日期
* @return 两个日期之间相差天数
*/
public static int dateDiff(Date d1, Date d2) {
if (d1 == null || d2 == null) {
throw new RuntimeException("dateDiff方法两个参数不能为null!");
}
d1 = setTime(d1, 0, 0, 0);
d2 = setTime(d2, 0, 0, 0);
Long diff = (d1.getTime() - d2.getTime()) / 1000 / 60 / 60 / 24;
return diff.intValue();
}
/**
* 设置日期格式的时间部分包含:时、分、秒;如果某部分为负数,不修改此部分
*
* @param date 日期
* @param hour 时
* @param minute 分
* @param second 秒
* @return 设置结果
*/
public static Date setTime(Date date, int hour, int minute, int second) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
if (hour >= 0) {
cal.set(Calendar.HOUR_OF_DAY, hour);
}
if (minute >= 0) {
cal.set(Calendar.MINUTE, minute);
}
if (second >= 0) {
cal.set(Calendar.SECOND, second);
}
return cal.getTime();
}
/**
* 把毫秒转化成日期
*
* @param dateFormat 要转换的日期
* @param millSec 毫秒数
* @return 转换后的日期
*/
public static String transferLongToDate(String dateFormat, Long millSec) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Date date = new Date(millSec);
return sdf.format(date);
}
/**
* 把日期加天数,返回结果
*
* @param date 日期
* @param day 增加天数
* @return 新日期
*/
public static Long addDay(Long date, int day) {
if (date == null) {
return null;
}
Date realDate = addDay(toRealDate(date), day);
return toLongDate(realDate);
}
/**
* 把长整形日期转换成真实日期 20150102030405 2015年1月2日3时4分5秒
*
* @param date 数字型日期
* @return 日期类型
*/
public static Date toRealDate(Long date) {
if (date == null){
return null;
}
Calendar calendar = Calendar.getInstance();
int year = (int) (date / 10000000000l);
calendar.set(Calendar.YEAR, year);
int month = (int) ((date % 10000000000l) / 100000000);
calendar.set(Calendar.MONTH, month - 1);
int day = (int) ((date % 100000000) / 1000000);
calendar.set(Calendar.DAY_OF_MONTH, day);
int hour = (int) ((date % 1000000) / 10000);
calendar.set(Calendar.HOUR_OF_DAY, hour);
int minute = (int) ((date % 10000) / 100);
calendar.set(Calendar.MINUTE, minute);
int second = (int) (date % 100);
calendar.set(Calendar.SECOND, second);
return calendar.getTime();
}
/**
* Date类型转换成Long型日期
*
* @param date 日期
* @return 转换后的格式
*/
public static Long toLongDate(Date date) {
if (date == null) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
return Long.valueOf(sdf.format(date));
}
/**
* 判断时间是否在当天
* @param date
* @return
*/
public static boolean isToday(Date date){
SimpleDateFormat fmt=new SimpleDateFormat("yyyy-MM-dd");
if(fmt.format(date).toString().equals(fmt.format(new Date()).toString())){//格式化为相同格式
return true;
}else {
return false;
}
}
}