写了一个比较全面的日期工具类
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/**
* 日期工具类
*
* @author luoxiang
* @version 2017-04-23
*/
public class DateUtils {
// 斜杠:slash
public static final String SLASH_DATE = "yyyy/MM/dd";
public static final String SLASH_DATETIME = "yyyy/MM/dd HH:mm:ss";
public static final String SLASH_DATETIME_DETAIL = "yyyy/MM/dd HH:mm:ss SSS";
// 拼接:joint
public static final String JOINT_DATE = "yyyyMMdd";
public static final String JOINT_DATETIME = "yyyyMMddHHmmss";
public static final String JOINT_DATETIME_DETAIL = "yyyyMMddHHmmssSSS";
// 连字符:hyphens(默认格式)
public static final String HYPHENS_DATE = "yyyy-MM-dd";
public static final String HYPHENS_DATETIME = "yyyy-MM-dd HH:mm:ss";
public static final String HYPHENS_DATETIME_DETAIL = "yyyy-MM-dd HH:mm:ss SSS";
/**
* ********************** Date -> String [BEGIN] ***********************
*/
/**
* 按指定格式格式化当前日期
*/
public static String format(Date date, String pattern) {
return DateFormatUtils.format(date, pattern);
}
/**
* 格式化当前日期,格式:yyyy-MM-dd
*/
public static String formatCurrentDate() {
return DateFormatUtils.format(new Date(), HYPHENS_DATE);
}
/**
* 格式化当前日期时间,格式:yyyy-MM-dd HH:mm:ss
*/
public static String formatCurrentDatetime() {
return DateFormatUtils.format(new Date(), HYPHENS_DATETIME);
}
/**
* 格式化当前日期时间(包含毫秒),格式:yyyy-MM-dd HH:mm:ss SSS
*/
public static String formatCurrentDatetimeDetail() {
return DateFormatUtils.format(new Date(), HYPHENS_DATETIME_DETAIL);
}
/**
* 格式化日期,格式:yyyy-MM-dd
*/
public static String formatDate(Date date) {
return DateFormatUtils.format(date, HYPHENS_DATE);
}
/**
* 格式化日期时间,格式:yyyy-MM-dd HH:mm:ss
*/
public static String formatDatetime(Date date) {
return DateFormatUtils.format(date, HYPHENS_DATETIME);
}
/**
* 格式化日期时间(包含毫秒),格式:yyyy-MM-dd HH:mm:ss SSS
*/
public static String formatDatetimeDetail(Date date) {
return DateFormatUtils.format(date, HYPHENS_DATETIME_DETAIL);
}
/**
* 格式化当前日期,格式:yyyyMMdd
*/
public static String formatCurrentDateUseJoint() {
return DateFormatUtils.format(new Date(), JOINT_DATE);
}
/**
* 格式化当前日期时间,格式:yyyyMMddHHmmss
*/
public static String formatCurrentDatetimeUseJoint() {
return DateFormatUtils.format(new Date(), JOINT_DATETIME);
}
/**
* 格式化当前日期时间(包含毫秒),格式:yyyyMMddHHmmssSSS
*/
public static String formatCurrentDatetimeDetailUseJoint() {
return DateFormatUtils.format(new Date(), JOINT_DATETIME_DETAIL);
}
/**
* 格式化日期,格式:yyyyMMdd
*/
public static String formatDateUseJoint(Date date) {
return DateFormatUtils.format(date, JOINT_DATE);
}
/**
* 格式化日期时间,格式:yyyyMMddHHmmss
*/
public static String formatDatetimeUseJoint(Date date) {
return DateFormatUtils.format(date, JOINT_DATETIME);
}
/**
* 格式化日期时间(包含毫秒),格式:yyyyMMddHHmmssSSS
*/
public static String formatDatetimeDetailUseJoint(Date date) {
return DateFormatUtils.format(date, JOINT_DATETIME_DETAIL);
}
/** *********************** Date -> String [END] *********************** */
/**
* ********************** String -> Date [BEGIN] ***********************
*/
public static Date parse(String datetime, String pattern) {
try {
return org.apache.commons.lang3.time.DateUtils.parseDate(datetime, pattern);
} catch (ParseException e) {
throw new IllegalArgumentException(e.getMessage(), e);
}
}
/**
* 将字符串日期转换成Date类型,字符串格式:yyyy-MM-dd
*/
public static Date parseDate(String date) {
return parse(date, HYPHENS_DATE);
}
/**
* 校验日期字符串是否合法,合法字符串格式:yyyy-MM-dd
*/
public static boolean validDate(String date) {
try {
parseDate(date);
return Boolean.TRUE;
} catch (Exception e) {
return Boolean.FALSE;
}
}
/**
* 将字符串日期转换成Date类型,字符串格式:yyyy-MM-dd HH:mm:ss
*/
public static Date parseDatetime(String datetime) {
return parse(datetime, HYPHENS_DATETIME);
}
/**
* 校验日期时间字符串是否合法,合法格式:yyyy-MM-dd HH:mm:ss
*/
public static boolean validDatetime(String datetime) {
try {
parseDatetime(datetime);
return Boolean.TRUE;
} catch (Exception e) {
return Boolean.FALSE;
}
}
/**
* 将字符串日期(含毫秒)转换成Date类型,字符串格式:yyyy-MM-dd HH:mm:ss SSS
*/
public static Date parseDatetimeDetail(String datetimeDetail) {
return parse(datetimeDetail, HYPHENS_DATETIME_DETAIL);
}
/**
* 校验日期时间字符串(含毫秒)是否合法,合法格式:yyyy-MM-dd HH:mm:ss SSS
*/
public static boolean validDatetimeDetail(String datetimeDetail) {
try {
parseDatetimeDetail(datetimeDetail);
return Boolean.TRUE;
} catch (Exception e) {
return Boolean.FALSE;
}
}
/**
* 将字符串日期转换成Date类型,字符串格式:yyyyMMdd
*/
public static Date parseDateUseJoint(String date) {
return parse(date, JOINT_DATE);
}
/**
* 校验日期字符串是否合法,合法字符串格式:yyyyMMdd
*/
public static boolean validDateUseJoint(String date) {
try {
parseDateUseJoint(date);
return Boolean.TRUE;
} catch (Exception e) {
return Boolean.FALSE;
}
}
/**
* 将字符串日期转换成Date类型,字符串格式:yyyyMMddHHmmss
*/
public static Date parseDatetimeUseJoint(String datetime) {
return parse(datetime, JOINT_DATETIME);
}
/**
* 校验日期时间字符串是否合法,合法格式:yyyyMMddHHmmss
*/
public static boolean validDatetimeUseJoint(String datetime) {
try {
parseDatetimeUseJoint(datetime);
return Boolean.TRUE;
} catch (Exception e) {
return Boolean.FALSE;
}
}
/**
* 将字符串日期(含毫秒)转换成Date类型,字符串格式:yyyyMMddHHmmssSSS
*/
public static Date parseDatetimeDetailUseJoint(String datetimeDetail) {
return parse(datetimeDetail, JOINT_DATETIME_DETAIL);
}
/**
* 校验日期时间字符串(含毫秒)是否合法,合法格式:yyyyMMddHHmmssSSS
*/
public static boolean validDatetimeDetailUseJoint(String datetimeDetail) {
try {
parseDatetimeDetailUseJoint(datetimeDetail);
return Boolean.TRUE;
} catch (Exception e) {
return Boolean.FALSE;
}
}
/** *********************** String -> Date [END] *********************** */
/**
* ********************** OTHER [BEGIN] ***********************
*/
public static Date parseAuto(String source) {
if (StringUtils.isBlank(source)) {
return null;
}
try {
if (source.indexOf('-') > 0) {// 以"-"分隔
if (source.indexOf(':') > 0) {
return parse(source, HYPHENS_DATETIME);
} else {
return parse(source, HYPHENS_DATE);
}
}
if (source.indexOf('/') > 0) {// 以"/"分隔
if (source.indexOf(':') > 0) {
return parse(source, SLASH_DATETIME);
} else {
return parse(source, SLASH_DATE);
}
}
try {
return parse(source, JOINT_DATETIME);
} catch (Exception e) {
return parse(source, JOINT_DATE);
}
} catch (Throwable e) {
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
}
/**
* 在指定时间上增加年份
*/
public static Date addYear(Date date, int amount) {
Calendar c = new GregorianCalendar();
c.setTime(date);
c.add(Calendar.YEAR, amount);
return c.getTime();
}
/**
* 计算两个日期之间相差的天数
* @param smdate 较小的时间
* @param bdate 较大的时间
* @return 相差天数
* @throws ParseException
*/
public static int daysBetween(Date smdate,Date bdate)
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
smdate=sdf.parse(sdf.format(smdate));
} catch (ParseException e) {
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
try {
bdate=sdf.parse(sdf.format(bdate));
} catch (ParseException e) {
e.printStackTrace();
throw new IllegalArgumentException(e.getMessage());
}
Calendar cal = Calendar.getInstance();
cal.setTime(smdate);
long time1 = cal.getTimeInMillis();
cal.setTime(bdate);
long time2 = cal.getTimeInMillis();
long between_days=(time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
/**
*
* @author luoxiang
* @Title: getCurrentMonthLastDay
* @Description: 计算当前月最后一天的日期
* @param @return 设定文件
* @return Date 返回类型
* @throws
*/
public static Date getCurrentMonthLastDay() {
// 获取Calendar
Calendar calendar = Calendar.getInstance();
// 设置时间,当前时间不用设置
// calendar.setTime(new Date());
// 设置日期为本月最大日期
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
return calendar.getTime();
}
/**
*
* @author luoxiang
* @Title: getOtherDayDate
* @Description: 获取当前日前前后指定天数的日期
* @param @return 设定文件
* @return Date 返回类型
* @throws
*/
public static Date getOtherDayDate(int i) {
Date date = new Date();
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, i);
return c.getTime();
}
/**
*
* @author luoxiang
* @Title: getOneDayDate
* @Description: 获取指定日期前后指定天数的日期
* @param @param Time
* @param @param i
* @param @return 设定文件
* @return Date 返回类型
* @throws
*/
public static Date getOneDayDate(Date Time,int i) {
Calendar c = Calendar.getInstance();
c.setTime(Time);
c.add(Calendar.DATE, i);
return c.getTime();
}
/**
*
* @author luoxiang
* @Title: getCurrentYear
* @Description: 获取当前年份
* @param @return 设定文件
* @return int 返回类型
* @throws
*/
public static int getCurrentYear() {
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.YEAR);
}
/**
*
* @author luoxiang
* @Title: getCurrentMonth
* @Description: 获取当前月份
* @param @return 设定文件
* @return int 返回类型
* @throws
*/
public static int getCurrentMonth() {
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.MONTH) + 1;
}
/**
* 获取当前
* @author luoxiang
* @Title: getCurrentDay
* @Description: 获取当前日期
* @param @return 设定文件
* @return int 返回类型
* @throws
*/
public static int getCurrentDay() {
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.DATE);
}
/**
*
* @author luoxiang
* @Title: getCurrentFirstday
* @Description: 获取当前月第一天的日期
* @param @return 设定文件
* @return Date 返回类型
* @throws
*/
public static Date getCurrentFirstday() {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar cale = Calendar.getInstance();
cale.add(Calendar.MONTH, 0);
cale.set(Calendar.DAY_OF_MONTH, 1);
String firstday = format.format(cale.getTime());
return DateUtils.parseDate(firstday);
}
/** *********************** OTHER [END] *********************** */
}