public class DateUtil extends org.apache.commons.lang3.StringUtils {
public static final String ISO_DATE_FORMAT = "yyyy-MM-dd";
public static final String ISO_DATETIME_NO_T_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final String ISO_DATE_NO_HYPHEN_FORMAT = "yyyyMMdd";
public static final String ISO_DATETIME_NO_HYPHEN_AND_T_FORMAT = "yyyyMMdd HH:mm:ss";
/**
* 将timestamp转换为Date类型
*/
public static Date convertTimestampToDate(Timestamp timestamp) {
return new Date(timestamp.getTime());
}
/**
* 将日期按照指定模式转换为字符串
*
* @param date
* 日期
* @param pattern
* 指定模式
* @return 转换后的字符串
*/
public static String convertToString(final Date date, final String pattern) {
if (date != null) {
return new SimpleDateFormat(pattern).format(date);
} else {
return null;
}
}
/**
* 将字符串按照指定格式转换为日期
*
* @param source
* 字符串
* @param pattern
* 指定格式
* @return 日期
* @throws ParseException
*/
public static Date converToDate(final String source, final String pattern) throws ParseException {
return new SimpleDateFormat(pattern).parse(source);
}
/**
* 取得当前年份
*
* @return 当前年份
*/
public static int getCurrentYear() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR);
}
/**
* 取得当前月份
*
* @return 当前月份
*/
public static int getCurrentMonth() {
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.MONTH) + 1;
}
/**
* 取得当前月份的第一天对应的日期字符串
*/
public static String getBeginDateOfMonth() {
Calendar calendar = Calendar.getInstance();
String year = String.valueOf(calendar.get(Calendar.YEAR));
String month = calendar.get(Calendar.MONTH) < 9 ? "0" + String.valueOf(calendar.get(Calendar.MONTH) + 1) : String.valueOf(calendar.get(Calendar.MONTH) + 1);
return year + "-" + month + "-01";
}
/**
* 取得今天对应的日期字符串
*/
public static String getCurrentDate() {
return convertToString(new Date(), ISO_DATE_FORMAT);
}
/**
* 判断一个日期字符串是否合法
*
* @param date
* 日期字符串
* @param pattern
* 日期模式
* @return 合法则返回true
*/
public static boolean isValidDate(final String date, final String pattern) {
if (date != null) {
try {
converToDate(date, pattern);
return true;
} catch (ParseException e) {
return false;
}
} else {
return false;
}
}
/**
* 将日期转换为当日开始的日期
*/
public static Date getBeginDateOfDay(final Date date) {
try {
return converToDate(convertToString(date, ISO_DATE_FORMAT) + " 00:00:00", ISO_DATETIME_NO_T_FORMAT);
} catch (ParseException e) {
throw new RuntimeException(e.getMessage(), e); // Will Never happen
}
}
/**
* 将输入的日期字符串转换为当日开始日期
*
* @throws ParseException
*/
public static Date getBeginDateOfDay(final String date, final String pattern) throws ParseException {
return converToDate(date + " 00:00:00", pattern);
}
/**
* 将输入日期转换为当日结束日期
*/
public static Date getEndDateOfDay(final Date date) {
try {
return converToDate(convertToString(date, ISO_DATE_FORMAT) + " 23:59:59", ISO_DATETIME_NO_T_FORMAT);
} catch (ParseException e) {
throw new RuntimeException(e.getMessage(), e); // Will Never happen
}
}
/**
* 将输入的日期字符串转换为当日结束日期
*
* @throws ParseException
*/
public static Date getEndDateOfDay(final String date, final String pattern) throws ParseException {
return converToDate(date + " 23:59:59", pattern);
}
/**
* 求某年月的第一天 java里0到11分别是1到12月
*
* @param year
* @param month
* @return Date
*/
public static Date getMonthFirst(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
Date currYearFirst = calendar.getTime();
return currYearFirst;
}
/**
* 求某年月的最后一天 java里0到11分别是1到12月
*
* @param year
* @param month
* @return Date
*/
public static Date getMonthLast(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.roll(Calendar.DAY_OF_MONTH, -1);// 向指定日历字段添加指定(有符号的)时间量,不更改更大的字段。负的时间量意味着向下滚动。
Date currMonthLast = calendar.getTime();
return currMonthLast;
}
/**
* 某年某月第几周第几天 是几月几号
*
* @param year
* 年份
* @param month
* 月份
* @param weekOfMonth
* 这个月的第几周
* @param dayOfWeek
* 星期几
* @return
*/
public static String weekDateToData(int year, int month, int weekOfMonth, int dayOfWeek) {
Calendar c = Calendar.getInstance();
// 计算出 x年 y月 1号 是星期几
c.set(year, month - 1, 1);
// 如果i_week_day =1 的话 实际上是周日
int i_week_day = c.get(Calendar.DAY_OF_WEEK);
int sumDay = 0;
// dayOfWeek+1 就是星期几(星期日 为 1)
if (i_week_day == 1) {
sumDay = (weekOfMonth - 1) * 7 + dayOfWeek + 1;
} else {
sumDay = 7 - i_week_day + 1 + (weekOfMonth - 1) * 7 + dayOfWeek + 1;
}
// 在1号的基础上加上相应的天数
c.set(Calendar.DATE, sumDay);
SimpleDateFormat sf2 = new SimpleDateFormat("yyyy-MM-dd");
return sf2.format(c.getTime());
}
/**
* 获得当天之后的N天日期
*
* @param num
* 当天后的第N天
* @return 返回的日期
*/
public static List<String> getNextDays(int num) {
List<String> list = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
for (int i = 1; i < num; i++) {
list.add(sdf.format(getAfterDate(i)));
}
return list;
}
/**
* 获取当前日期n天后的日期
*
* @param n
* :返回当天后的第N天
* @return 返回的日期
*/
public static Date getAfterDate(int n) {
Calendar c = Calendar.getInstance();
c.add(Calendar.DAY_OF_MONTH, n);
return c.getTime();
}
/**
* 获取当前日期n天后的日期
*
* @param n
* :返回当天后的第N天
* @return 返回的日期
*/
public static Date getAfterDate(Date date, int n) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, n);
return calendar.getTime();
}
/**
* 判断今天是不是周末
*
* @return
*/
public static boolean isTodayWeekend() {
Calendar c = Calendar.getInstance(); // 获取当前日期
int day = c.get(Calendar.DAY_OF_WEEK); // 获取当前日期星期,英国算法(周日为一周第一天)
if (day == 7 || day == 1) { // 如果是周六或周日就返回true
return true;
}
return false;
}
/**
* @param specifiedStrDate
* 指定日期
* @param dateForamtType
* 指定日期格式
* @param intervalNum
* 间隔数(周或者天)
* @param calenderParam
* 指定修改日期格式的属性Calendar.WEEK_OF_MONTH(周)或者Calendar.DAY_OF_MONTH(天)
* @return
*/
public static String getIntervalStrDate(String specifiedStrDate, String dateForamtType, int intervalNum, int calenderParam) {
if (specifiedStrDate == null) {
return null;
}
if (specifiedStrDate.trim().equals("")) {
return null;
}
DateFormat df = new SimpleDateFormat(dateForamtType);
Calendar cal = Calendar.getInstance();
cal.setTime(DateUtil.turnStrDateToJavaUtilDate(specifiedStrDate, dateForamtType));
cal.add(calenderParam, intervalNum);
return df.format(cal.getTime());
}
/**
* 判断两个字符串型日期是否指同一天
*
* @param strDate
* 字符串日期
* @param anotherStrDate
* 另一个字符日期
* @return
*/
public static boolean isTwoStrDateTheSameDay(String strDate, String anotherStrDate) {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date firstStrDate = null;
Date secondStrDate = null;
try {
firstStrDate = df.parse(strDate);
secondStrDate = df.parse(anotherStrDate);
} catch (ParseException e) {
e.printStackTrace();
}
if (firstStrDate.getTime() > secondStrDate.getTime()) {
return false;
} else if (firstStrDate.getTime() < secondStrDate.getTime()) {
return false;
} else if (firstStrDate.getTime() == secondStrDate.getTime()) {
return true;
} else {
return false;
}
}
public static boolean isTheLastDayOfCurrentMonth(Object targetObj, String formtStr) {
boolean flag = false;
if (targetObj == null) {// 如果传入日期参数为null,则返回false
return flag;
} else if ("".equals(targetObj.toString())) {// 如果传入日期参数为空字符串,则返回false
return flag;
}
String srcDate = "";
if (targetObj.getClass() == String.class) {
srcDate = DateUtil.turnJavaUtilDateToStrDate(DateUtil.turnStrDateToJavaUtilDate(targetObj.toString(), "yyyy-MM-dd"), formtStr);
} else if (targetObj.getClass() == Date.class) {
srcDate = DateUtil.turnJavaUtilDateToStrDate((Date) targetObj, formtStr);
} else {
srcDate = DateUtil.turnJavaUtilDateToStrDate(new Date(), "yyyy-MM-dd");
}
if (srcDate.compareTo(DateUtil.getTheLastDayOfCurrentMonth()) == 0) {// 和当前月最后一天比较的结果为0,则是当前月最后一天
flag = true;
return flag;
} else {
return flag;
}
}
/**
* 指定日期、相加月数值、格式,得到相加日期
*
* @param date
* 指定日期
* @param formtStr
* 格式
* @param number
* 数组
* @param calender
* 指定修改日期格式数组
* @return
*/
public static String tragetDate(String date, String formtStr, int number, int calender) {
if (date == null) {
return null;
}
if (date.trim().equals("")) {
return null;
}
DateFormat df = new SimpleDateFormat(formtStr);// "yyyy-MM-dd"
Calendar cal = Calendar.getInstance();
cal.setTime(DateUtil.toDate(date));
cal.add(calender, number);
return df.format(cal.getTime());
}
/**
* 按照"yyyy-MM-dd"格式将字符串date转换为日期对象
*
* @param date
* @return
*/
public static java.util.Date toDate(String date) {
if (date == null) {
return null;
}
if (date.trim().equals("")) {
return null;
}
java.text.SimpleDateFormat simformat = new SimpleDateFormat("yyyy-MM-dd");
try {
return simformat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 获取当前月最后一天的字符串日期
*
* @return
*/
public static String getTheLastDayOfCurrentMonth() {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");//
Calendar cal = Calendar.getInstance();// 获取当前日期,例如2012-08-02
cal.set(Calendar.DAY_OF_MONTH, 1);// 转变为当前月的第一天,例如2012-08-01
cal.add(Calendar.MONTH, 1);// 转变为下个月的第一天,例如2012-09-01
cal.add(Calendar.DAY_OF_MONTH, -1);// 下个月第一天,倒数一天,即为当前月的最后一天。例如2012-08-31
return df.format(cal.getTime());
}
/**
* 将java.util.Date型日期转化指定格式的字符串型日期
*
* @param javaUtilDate
* 传入的java.util.Date型日期
* @param dateFormatType
* 指定格式的字符串型日期
* @return
*/
public static String turnJavaUtilDateToStrDate(java.util.Date javaUtilDate, String dateFormatType) {
String strDate = "";
if (javaUtilDate != null) {
SimpleDateFormat sdf = new SimpleDateFormat(dateFormatType);
strDate = sdf.format(javaUtilDate);
}
return strDate;
}
/**
* 按指定的字符串格式将字符串型日期转化为java.util.Date型日期
*
* @param strDate
* 字符型日期
* @param dateFormatType
* 指定日期格式
* @return
*/
public static java.util.Date turnStrDateToJavaUtilDate(String strDate, String dateFormatType) {
java.util.Date javaUtilDate = null;
java.text.DateFormat df = new java.text.SimpleDateFormat(dateFormatType);
if (strDate != null && (!"".equals(strDate)) && dateFormatType != null && (!"".equals(dateFormatType))) {
try {
javaUtilDate = df.parse(strDate);
} catch (ParseException e) {
e.printStackTrace();
}
}
return javaUtilDate;
}
/**
* 将util.date转换成XMLGregorianCalendar
* */
@SuppressWarnings("static-access")
public static XMLGregorianCalendar getXMLGregorianCalendar(Date date) throws Exception {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
DatatypeFactory dtf = DatatypeFactory.newInstance();
return dtf.newXMLGregorianCalendar(calendar.get(calendar.YEAR), calendar.get(calendar.MONTH) + 1, calendar.get(calendar.DAY_OF_MONTH), calendar.get(calendar.HOUR),
calendar.get(calendar.MINUTE), calendar.get(calendar.SECOND), calendar.get(calendar.MILLISECOND), calendar.get(calendar.ZONE_OFFSET) / (1000 * 60));
}
Date工具类
最新推荐文章于 2020-06-02 17:14:42 发布