开发中遇到,总结一下。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateUtil {
public static final String SDF_DT_23 = "yyyy-MM-dd HH:mm:ss.SSS";
public static final String SDF_DT_17 = "yyyyMMddHHmmssSSS";
public static final String SDF_DT_19 = "yyyy-MM-dd HH:mm:ss";
public static final String SDF_DT_14 = "yyyyMMddHHmmss";
public static final String SDF_D_10 = "yyyy-MM-dd";
public static final String SDF_D_8 = "yyyyMMdd";
public static final String SDF_T_12 = "HH:mm:ss.SSS";
public static final String SDF_T_9 = "HHmmssSSS";
public static final String SDF_T_8 = "HH:mm:ss";
public static final String SDF_T_6 = "HHmmss";
public static final String SDF_DT_CHN = "yyyy年MM月dd日HH时mm分ss秒";
/**
* 获取当前系统日期,并以所传类型将日期/时间转换为指定格式的字符串
*
* @param formatType 格式化日期类型
* @return
*/
public static String getNowDateTime(String formatType){
return getDateTimeFormat(new Date(), formatType);
}
/**
* 根据所传类型,将日期/时间转换为指定格式的字符串
*
* @param date 日期/时间
* @param formatType 格式化日期类型
* @return
*/
public static String getDateTimeFormat(Date date, String formatType) {
checkFormatType(formatType);
DateFormat df = new SimpleDateFormat(formatType);
return df.format(date);
}
/**
* 将日期/时间转换为指定格式(yyyyMMddHHmmss)的字符串
*
* @param date 日期/时间
* @return
*/
public static String getDateTime(Date date) {
DateFormat df = new SimpleDateFormat(SDF_DT_14);
return df.format(date);
}
/**
* 将日期/时间转换为指定格式(HHmmss)的字符串
*
* @param date 日期/时间
* @return
*/
public static String getTime(Date date){
DateFormat df = new SimpleDateFormat("SDF_T_6");
return df.format(date);
}
/**
* 根据所传类型,将字符串转换为指定格式的Date
*
* @param dateStr 日期/时间串
* @param formtType 格式化日期类型
* @return
*/
public static Date getDateByFormatStr(String dateStr, String formatType){
try {
DateFormat df = new SimpleDateFormat(formatType);
checkFormatType(formatType);
return df.parse(dateStr);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
/**
* 不同格式间互相装换
*
* @param dateStr 原日期/时间串
* @param preFormatType 原格式类型
* @param proFormatType 目标格式类型
* @return
*/
public static String formatConvert(String dateStr, String preFormatType, String proFormatType) {
String returnStr = null;
try {
checkFormatType(preFormatType, proFormatType);
Date preDate = new SimpleDateFormat(preFormatType).parse(dateStr);
returnStr = new SimpleDateFormat(proFormatType).format(preDate);
} catch (ParseException e) {
e.printStackTrace();
}
return returnStr;
}
/**
* 日期加减运算
*
* @param dateStr 操作日期
* @param diff 差值
* @param formatType 日期/时间格式类型
* @return
*/
public static String dateOperation(String dateStr, String diff, String formatType){
Calendar c = Calendar.getInstance();
c.setTime(getDateByFormatStr(dateStr, formatType));
c.add(Calendar.DATE, Integer.parseInt(diff));
return getDateTimeFormat(c.getTime(), formatType);
}
/**
* 校验格式化类型是否正确
*
* @param formatType 格式化类型
* @return
*/
public static boolean checkFormatType(String... formatType) {
try {
for (String type:formatType){
if(!(SDF_DT_23.equals(type) || SDF_DT_17.equals(type)
|| SDF_DT_19.equals(type) || SDF_DT_14.equals(type)
|| SDF_D_10.equals(type) || SDF_D_8.equals(type)
|| SDF_T_12.equals(type) || SDF_T_12.equals(type)
|| SDF_T_8.equals(type) || SDF_T_6.equals(type)
|| SDF_DT_CHN.equals(type))){
throw new Exception("所传"+ type +"格式化类型不正确,具体格式可参照DateUtil类!");
}
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
/**
* test
* @param args
*/
public static void main(String args[]){
String nowDate = getNowDateTime(DateUtil.SDF_DT_23);
System.out.println(nowDate);
String date = dateOperation(nowDate, "-4", DateUtil.SDF_DT_23);
System.out.println(date);
String covertdate = DateUtil.formatConvert(nowDate, DateUtil.SDF_DT_23, DateUtil.SDF_T_6);
System.out.println(covertdate);
}
}
备注:1.SimpleDateFormat中的parse方法可以把String型的字符串转换成特定格式的date类型;
2.SimpleDateFormat中的format方法可以把Date型的字符串转换成特定格式的String类型。