package com.common;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 时间工具类
*
* @author zhujianyang
*/
public class DateUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(DateUtil.class);
private DateUtil() {
}
/**
* 日期格式
*/
public static final String FORMAT = "yyyy-MM-dd hh:mm:ss";
/**
* 日期格式
*/
public static final String FORMAT_1 = "yyyyMMdd";
/**
* 日期格式
*/
public static final String FORMAT_2 = "yyyy-MM-dd";
/**
* 时间格式
*/
public static final String FORMAT_3 = "yyyyMMdd HHmmss";
/**
* 时间格式
*/
public static final String FORMAT_4 = "yyyyMMddHHmmss";
/**
* 时间格式
*/
public static final String FORMAT_5 = "yyyy-MM-dd HH:mm:ss";
/**
* 时间格式
*/
public static final String FORMAT_6 = "yyyy/MM/dd HH:mm:ss";
/**
* 日期格式
*/
public static final String FORMAT_7 = "yyyyMMdd";
/**
* 特殊时间格式
*/
public static final String FORMAT_8 = "yyyy-MM-dd_HH:mm:ss";
/**
* 特殊时间格式
*/
public static final String FORMAT_9 = "yyyy-MM-dd HH-mm-ss";
/**
* 时间格式
*/
public static final String FORMAT_11 = "HH:mm";
/**
* 特殊时间格式
*/
public static final String TIME_0 = " 00:00:00";
/**
* 特殊时间格式
*/
public static final String TIME_1 = " 23:59:59";
/**
* 特殊时间格式
*/
public static final String TIME_2 = "-01 00:00:00";
/**
* 获取当前日期
*
* @return Timestamp
*/
public static Timestamp getCurrentTimestamp() {
return new Timestamp(System.currentTimeMillis());
}
/**
* 日期转换为时间戳
*
* @return Timestamp
*/
public static long dateToLong(Date date) {
return date.getTime();
}
/**
* 获取指定格式的当前时间
*
* @param format 格式
* @return String
*/
public static String getCurrentTime(String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(new Date());
}
/**
* Date转换为Str
*
* @param date Date
* @param format 格式
* @return String
*/
public static String dateToStr(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return sdf.format(date);
}
/**
* 获取T天之前或者之后的日期
*
* @param t 间隔天数
* @return "2019-08-01"
*/
public static String getDatetday(int t) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, t);
return dateToStr(calendar.getTime(), FORMAT_2);
}
/**
* 将字符串转换为Date
*
* @param strDate 转换前String类型的时间
* @param format 格式
* @return 转换后Date类型的日期
*/
public static Date strToDate(String strDate, String format) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);
Date date = null;
try {
date = simpleDateFormat.parse(strDate);
} catch (Exception e) {
LOGGER.error("将字符串转换为Date异常", e);
}
return date;
}
/**
* 从字符串类型获取日期Date
*
* @param dateStr 日期字符串,如:20080321
* @param format 格式化模式,如yyyymmdd 和dateStr保持一致的格式
* @return 返回一个Date类型日期
*/
public static Date getDateFromString(String dateStr, String format) {
Date date = null;
if (StringUtils.isNotBlank(dateStr) && StringUtils.isNotBlank(format)) {
SimpleDateFormat df = new SimpleDateFormat(format);
try {
date = df.parse(dateStr);
} catch (Exception e) {
LOGGER.error("从字符串类型获取日期Date异常", e);
}
}
return date;
}
/**
* String类型转换成Timestamp类型日期
*
* @param dateStr 日期字符串
* @return Timestamp
*/
public static Timestamp getTimestampFromString(String dateStr, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
return Timestamp.valueOf(sdf.format(getDateFromString(dateStr, format)));
}
/**
* Date类型转换成Calendar类型日期
*
* @param date Date
* @return Calendar
*/
public static Calendar getCalendarFromDate(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar;
}
/**
* 获取指定calendar的月份
*
* @param calendar Calendar
* @return 返回月份值,是一个int型数据
*/
public static int getMonth(Calendar calendar) {
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 获取指定Calendar的年
*
* @param calendar Calendar
* @return 返回年值,是一个int型数据
*/
public static int getYear(Calendar calendar) {
return calendar.get(Calendar.YEAR);
}
/**
* 得到两个日期之间相差多少天
*
* @param beginDate 开始日期
* @param endDate 结束日期
* @return int
*/
public static int dateDiff(String beginDate, String endDate) {
SimpleDateFormat sdf = new SimpleDateFormat(FORMAT_2);
Date date = null;
try {
date = sdf.parse(endDate);
} catch (ParseException e) {
date = new Date();
LOGGER.error("结束时间转换为Date异常", e);
}
long end = date.getTime();
try {
date = sdf.parse(beginDate);
} catch (ParseException e) {
date = new Date();
LOGGER.error("开始时间转换为Date异常", e);
}
long begin = date.getTime();
//除1000是把毫秒变成秒
long day = (end - begin) / (1000 * 3600 * 24);
return Integer.parseInt(Long.toString(day));
}
/**
* 计算一段时间间隔的日期
*
* @param date 坐标日期
* @param time 间隔的时间
* @param type 时间类型(1年 2月 3日 4时 5分 6秒)
* @return 返回新的日期
*/
public static Date dateAddTime(Date date, int type, int time) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
switch (type) {
case 1:
calendar.add(Calendar.YEAR, time);
break;
case 2:
calendar.add(Calendar.MONTH, time);
break;
case 3:
calendar.add(Calendar.DATE, time);
break;
case 4:
calendar.add(Calendar.HOUR, time);
break;
case 5:
calendar.add(Calendar.MINUTE, time);
break;
case 6:
calendar.add(Calendar.SECOND, time);
break;
default:
break;
}
return calendar.getTime();
}
/**
* 获取月份
*/
public static String getMonths(int n) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"
评论0