package com.sf.arch.udata.privilege.common.util;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
*
* Description:日期时间操作的工具类
*
* @author Eddy Xiang
*/
public class DateUtil {
/** 日期格式(yyyy-MM-dd) */
public static final String yyyy_MM_dd_EN = "yyyy-MM-dd";
/** 日期格式(yyyy/MM/dd) */
public static final String yyyy_MM_dd_decline = "yyyy/MM/dd";
/** 日期格式(yyyyMMdd) */
public static final String yyyyMMdd_EN = "yyyyMMdd";
/** 日期格式(yyyy-MM) */
public static final String yyyy_MM_EN = "yyyy-MM";
/** 日期格式(yyyyMM) */
public static final String yyyyMM_EN = "yyyyMM";
/** 日期格式(yyyy-MM-dd HH:mm:ss) */
public static final String yyyy_MM_dd_HH_mm_ss_EN = "yyyy-MM-dd HH:mm:ss";
/** 日期格式(yyyy-MM-dd HH:mm:ss.S) */
public static final String yyyy_MM_dd_HH_mm_ss_S_EN = "yyyy-MM-dd HH:mm:ss.S";
/** 日期格式(yyyyMMddHHmmss) */
public static final String yyyyMMddHHmmss_EN = "yyyyMMddHHmmss";
/** 日期格式(yyyy年MM月dd日) */
public static final String yyyy_MM_dd_CN = "yyyy年MM月dd日";
/** 日期格式(yyyy年MM月dd日HH时mm分ss秒) */
public static final String yyyy_MM_dd_HH_mm_ss_CN = "yyyy年MM月dd日HH时mm分ss秒";
/** 日期格式(yyyy年MM月dd日HH时mm分) */
public static final String yyyy_MM_dd_HH_mm_CN = "yyyy年MM月dd日HH时mm分";
/** 北京boss订购接口报文头日期格式 */
public static final String BJBOSS_DATE = "yyyy-MM-dd'T'HH:mm:ss'Z'";
/** 日期格式(HH:mm:ss) */
public static final String HH_mm_ss_EN = "HH:mm:ss";
/** DateFormat缓存 */
private static Map<String, DateFormat> dateFormatMap = new HashMap<String, DateFormat>();
/**
* 获取DateFormat
* @param formatStr
* @return
*/
public static DateFormat getDateFormat(String formatStr) {
DateFormat df = dateFormatMap.get(formatStr);
if (df == null) {
df = new SimpleDateFormat(formatStr);
dateFormatMap.put(formatStr, df);
}
return df;
}
public static Date getDate() {
return Calendar.getInstance().getTime();
}
/**
* 按照默认formatStr的格式,转化dateTimeStr为Date类型 dateTimeStr必须是formatStr的形式
* @param dateTimeStr
* @param formatStr
* @return
*/
public static Date getDate(String dateTimeStr, String formatStr) {
try {
if (dateTimeStr == null || dateTimeStr.equals("")) {
return null;
}
DateFormat sdf = DateUtil.getDateFormat(formatStr);
return sdf.parse(dateTimeStr);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
/**
* 转化dateTimeStr为Date类型
* @param dateTimeStr
* @param formatStr
* @return
*/
public static Date convertDate(String dateTimeStr) {
try {
if (dateTimeStr == null || dateTimeStr.equals("")) {
return null;
}
DateFormat sdf = DateUtil.getDateFormat(yyyy_MM_dd_EN);
Date d = sdf.parse(dateTimeStr);
return d;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
/**
* 按照默认显示日期时间的格式"yyyy-MM-dd",转化dateTimeStr为Date类型
* dateTimeStr必须是"yyyy-MM-dd"的形式
* @param dateTimeStr
* @return
*/
public static Date getDate(String dateTimeStr) {
return getDate(dateTimeStr, yyyy_MM_dd_EN);
}
/**
* 将YYYYMMDD转换成Date日期
* @param date
* @return
* @throws Exception
*/
public static Date transferDate(String date) throws Exception {
if (date == null || date.length() < 1)
return null;
if (date.length() != 8)
throw new Exception("日期格式错误");
String con = "-";
String yyyy = date.substring(0, 4);
String mm = date.substring(4, 6);
String dd = date.substring(6, 8);
int month = Integer.parseInt(mm);
int day = Integer.parseInt(dd);
if (month < 1 || month > 12 || day < 1 || day > 31)
throw new Exception("日期格式错误");
String str = yyyy + con + mm + con + dd;
return DateUtil.getDate(str, DateUtil.yyyy_MM_dd_EN);
}
/**
* 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
* @param date
* @return
*/
public static String dateToDateString(Date date) {
return dateToDateString(date, yyyy_MM_dd_HH_mm_ss_EN);
}
/**
* 将Date转换成字符串“yyyymmddhhmmss”的字符串
* @param date
* @return
*/
public static String dateToDateFullString(Date date) {
if (null == date)
return null;
else
return dateToDateString(date, yyyyMMddHHmmss_EN);
}
/**
* 将Date转换成formatStr格式的字符串
* @param date
* @param formatStr
* @return
*/
public static String dateToDateString(Date date, String formatStr) {
DateFormat df = getDateFormat(formatStr);
return df.format(date);
}
/**
* 将String转换成formatStr格式的字符串
* @param formatStr1
* @param formatStr2
* @return
*/
public static String stringToDateString(String date, String formatStr1, String formatStr2) {
Date d = getDate(date, formatStr1);
DateFormat df = getDateFormat(formatStr2);
return df.format(d);
}
/**
* 获取当前日期yyyy-MM-dd的形式
* @return
*/
public static String getCurDate() {
return dateToDateString(new Date(), yyyy_MM_dd_EN);
}
/**
* 获取当前日期
* @return
*/
public static String getCurDate(String formatStr) {
return dateToDateString(new Date(), formatStr);
}
/**
* 获取当前日期yyyy年MM月dd日的形式
* @return
*/
public static String getCurCNDate() {
return dateToDateString(new Date(), yyyy_MM_dd_CN);
}
/**
* 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式
* @return
*/
public static String getCurDateTime() {
return dateToDateString(new Date(), yyyy_MM_dd_HH_mm_ss_EN);
}
/**
* 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
* @return
*/
public static String getCurZhCNDateTime() {
return dateToDateString(new Date(), yyyy_MM_dd_HH_mm_ss_CN);
}
/**
* 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
* @param time1
* @param time2
* @return
*/
public static long compareDateStr(String time1, String time2) {
Date d1 = getDate(time1);
Date d2 = getDate(time2);
return d2.getTime() - d1.getTime();
}
/**
* 比较任意格式时间相差毫秒数
* @param time1
* @param time2
* @param format
* @return
*/
public static long compareDateStr(String time1, String time2, String format){
Date d1 = getDate(time1, format);
Date d2 = getDate(time2, format);
return d2.getTime() - d1.getTime();
}
/**
* 比较起始时间与当前时间相差毫秒数
* @param time
* @param format
* @return
*/
public static long compareDateNow(String time, String format){
Date date = getDate(time, format);
return new Date().getTime() - date.getTime();
}
/**
* 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
* @param time1
* @param time2
* @return
*/
public static long compareDateStr(Date time1, Date time2) {
return time2.getTime() - time1.getTime();
}
/**
* nows时间大于date时间 为true
* @param nows
* @param date
* @return
*/
public static boolean isTimeBefor(Date nows, Date date) {
long hous = nows.getTime() - date.getTime();
if (hous > 0) {
return true;
} else {
return false;
}
}
/**
* 将小时数换算成返回以毫秒为单位的时间
* @param hours
* @return
*/
public static long getMicroSec(BigDecimal hours) {
BigDecimal bd;
bd = hours.multiply(new BigDecimal(3600 * 1000));
return bd.longValue();
}
/**
* 获取当前日期years年后�
评论0