ConvertUtils.register注册Date转XMLGregorianCalendar的转换器

来源:互联网 发布:中建七局华北公司知乎 编辑:程序博客网 时间:2024/06/05 00:45

最近遇到BeanUtils.copyProperties(),把Date类型数据copy到XMLGregorianCalendar类型的字段上,以下是我写的转换器,把这个注册到ConvertUtils就可以使用了

import org.apache.commons.beanutils.*;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Calendar;
import java.util.Date;

import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;

public class XMLGregorianCalendarConverter implements Converter {


private Logger logger = LoggerFactory.getLogger(this.getClass());

    public Object convert(Class arg0, Object arg1) {
        if(arg1 instanceof XMLGregorianCalendar){
            return this.convert(arg0, (XMLGregorianCalendar)arg1);
        }else{
            return this.convert(arg0, (Date)arg1);
        }
    }
    
    public Calendar convert(Class calendarType, XMLGregorianCalendar xmlCalendar){
        return xmlCalendar.toGregorianCalendar();
    }
    
    public XMLGregorianCalendar convert(Class<?> xmlCalendarType, Date date){
    if(date == null) {
    return null;
         }
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);  
         XMLGregorianCalendar dateType = null;
          try {  
        DatatypeFactory dtf = DatatypeFactory.newInstance();  
        dateType = dtf.newXMLGregorianCalendar(); 
             dateType.setYear(cal.get(Calendar.YEAR));  
             dateType.setMonth(cal.get(Calendar.MONTH)+1);  
             dateType.setDay(cal.get(Calendar.DAY_OF_MONTH));  
             dateType.setHour(cal.get(Calendar.HOUR_OF_DAY));  
             dateType.setMinute(cal.get(Calendar.MINUTE));  
             dateType.setSecond(cal.get(Calendar.SECOND)); 
         } catch (Exception e) {
        e.printStackTrace();
         }  
         
         return dateType;  
    }

}


只要在BeanUtils.copyProperties(实体, 实体)前

加上ConvertUtils.register(new XMLGregorianCalendarConverter(), XMLGregorianCalendar.class);就可以了。

0 0
原创粉丝点击