首先定义一个Converter的Date实现类
import
java.util.Date;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;
import cn.sh.cares.commons.excel.util.ExcelUtils;
public class DateConverter implements Converter {
public Object convert(Class type, Object value) {
if (value == null ) {
return null ;
}
if (value instanceof Date) {
return value;
}
if (value instanceof Long) {
Long longValue = (Long) value;
return new Date(longValue.longValue());
}
try {
return ExcelUtils.SIMPLE_DATE_FORMATER.parse(value.toString());
} catch (Exception e) {
throw new ConversionException(e);
}
}
}
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;
import cn.sh.cares.commons.excel.util.ExcelUtils;
public class DateConverter implements Converter {
public Object convert(Class type, Object value) {
if (value == null ) {
return null ;
}
if (value instanceof Date) {
return value;
}
if (value instanceof Long) {
Long longValue = (Long) value;
return new Date(longValue.longValue());
}
try {
return ExcelUtils.SIMPLE_DATE_FORMATER.parse(value.toString());
} catch (Exception e) {
throw new ConversionException(e);
}
}
}
这个主要完成由String或者Long向Date型拷贝时如何转换,这样我们在转换之前只要在ConvertUtils中注册这个Converter就可以了,比如下面A和B类:
public
class
A {
private String start;
private Date end;
public Date getEnd() {
return end;
}
public void setEnd(Date end) {
this .end = end;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this .start = start;
}
public String toString() {
return " start = " + this .start + " , end = " + end;
}
}
public class B {
private Date start;
private String end;
public String getEnd() {
return end;
}
public void setEnd(String end) {
this .end = end;
}
public Date getStart() {
return start;
}
public void setStart(Date start) {
this .start = start;
}
public String toString() {
return " start = " + this .start + " , end = " + end;
}
}
private String start;
private Date end;
public Date getEnd() {
return end;
}
public void setEnd(Date end) {
this .end = end;
}
public String getStart() {
return start;
}
public void setStart(String start) {
this .start = start;
}
public String toString() {
return " start = " + this .start + " , end = " + end;
}
}
public class B {
private Date start;
private String end;
public String getEnd() {
return end;
}
public void setEnd(String end) {
this .end = end;
}
public Date getStart() {
return start;
}
public void setStart(Date start) {
this .start = start;
}
public String toString() {
return " start = " + this .start + " , end = " + end;
}
}
转换测试程序如下:
import
java.util.Date;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
public class MyTest {
public static void main(String[] args) throws Exception {
ConvertUtils.register( new DateConverter(), Date. class );
// 替换原来的StringConverter
ConvertUtils.register( new MyStringConverter(), String. class );
A a = new A();
a.setEnd( new Date());
a.setStart( " 2007-05-06 " );
B b = new B();
BeanUtils.copyProperties(b, a);
System.out.println(b);
}
}
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
public class MyTest {
public static void main(String[] args) throws Exception {
ConvertUtils.register( new DateConverter(), Date. class );
// 替换原来的StringConverter
ConvertUtils.register( new MyStringConverter(), String. class );
A a = new A();
a.setEnd( new Date());
a.setStart( " 2007-05-06 " );
B b = new B();
BeanUtils.copyProperties(b, a);
System.out.println(b);
}
}
这样子,输出结果为:
start = Sun May 06 00:00:00 CST 2007, end = 2007-11-28