通過配置全局的日期轉換來避免使用麻煩的注解。
首先用到了一個簡單的日期工具類dateutil.java
[java] view
plain copy
/**
* dateutil類
*
* @author liuzh
*/
public class dateutil {
public static final string y_m_d = "yyyy-mm-dd";
public static final string y_m_d_hm = "yyyy-mm-dd hh:mm";
public static final string y_m_d_hms = "yyyy-mm-dd hh:mm:ss";
public static final string ymd = "yyyymmdd";
public static final string ymdhm = "yyyymmddhhmm";
public static final string ymdhms = "yyyymmddhhmmss";
public static final string ymd = "yyyy/mm/dd";
public static final string ymd_hm = "yyyy/mm/dd hh:mm";
public static final string ymd_hms = "yyyy/mm/dd hh:mm:ss";
/**
* 智能轉換日期
*
* @param date
* @return
*/
public static string smartformat(date date) {
string datestr = null;
if (date == null) {
datestr = "";
} else {
try {
datestr = formatdate(date, y_m_d_hms);
//時分秒
if (datestr.endswith(" 00:00:00")) {
datestr = datestr.substring(0, 10);
}
//時分
else if (datestr.endswith("00:00")) {
datestr = datestr.substring(0, 16);
//秒
else if (datestr.endswith(":00")) {
} catch (exception ex) {
throw new illegalargumentexception("轉換日期失敗: " + ex.getmessage(), ex);
}
}
return datestr;
}
* @param text
public static date smartformat(string text) {
date date = null;
try {
if (text == null || text.length() == 0) {
date = null;
} else if (text.length() == 10) {
date = formatstringtodate(text, y_m_d);
} else if (text.length() == 13) {
date = new date(long.parselong(text));
} else if (text.length() == 16) {
date = formatstringtodate(text, y_m_d_hm);
} else if (text.length() == 19) {
date = formatstringtodate(text, y_m_d_hms);
} else {
throw new illegalargumentexception("日期長度不符合要求!");
} catch (exception e) {
throw new illegalargumentexception("日期轉換失敗!");
return date;
* 擷取目前日期
* @param format
* @throws exception
public static string getnow(string format) throws exception{
return formatdate(new date(), format);
* 格式化日期格式
* @param argdate
* @param argformat
* @return 格式化後的日期字元串
public static string formatdate(date argdate, string argformat) throws exception {
if (argdate == null) {
throw new exception("參數[日期]不能為空!");
if (stringutils.isempty(argformat)) {
argformat = y_m_d;
simpledateformat sdffrom = new simpledateformat(argformat);
return sdffrom.format(argdate).tostring();
* 把字元串格式化成日期
* @param argdatestr
public static date formatstringtodate(string argdatestr, string argformat) throws exception {
if (argdatestr == null || argdatestr.trim().length() < 1) {
string strformat = argformat;
if (stringutils.isempty(strformat)) {
strformat = y_m_d;
if (argdatestr.length() > 16) {
strformat = y_m_d_hms;
} else if (argdatestr.length() > 10) {
strformat = y_m_d_hm;
simpledateformat sdfformat = new simpledateformat(strformat);
//嚴格模式
sdfformat.setlenient(false);
return sdfformat.parse(argdatestr);
} catch (parseexception e) {
throw new exception(e);
}
需要用到的是兩個智能轉換日期的方法。關于轉換的格式和規則,請看這兩個方法,如果不符合你需要的,可以自行修改。
然後繼承simpledateformat寫一個智能轉換日期的類smartdateformat
* description: 智能日期轉換
* author: liuzh
public class smartdateformat extends simpledateformat {
@override
public stringbuffer format(date date, stringbuffer toappendto, fieldposition pos) {
return new stringbuffer(dateutil.smartformat(date));
public date parse(string text) throws parseexception {
return dateutil.smartformat(text);
這裡重寫了兩個方法,這兩個方法是互相轉換的方法,直接調用的dateutil提供的兩個智能轉換的方法。
最後在spring mvc的xml中配置:
[html] view
<bean class="org.springframework.http.converter.json.mappingjacksonhttpmessageconverter">
<property name="objectmapper">
<bean class="org.codehaus.jackson.map.objectmapper">
<property name="dateformat">
<!-- 智能日期轉換 -->
<bean class="packagename.smartdateformat"/>
</property>
</bean>
</property>
</bean>
這段代碼主要是針對mappingjacksonhttpmessageconverter進行配置。經過這樣的配置之後,spring就能自動根據日期樣式進行轉換了。
至于“智能”轉換,完全就是簡單的if/else判斷,可以檢視最上面的代碼。