package com.alibaba.tamper.process.convertor;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import com.alibaba.tamper.core.BeanMappingException;
/**
* string <-> Date/Calendar 之间的转化
*
* @author jianghang 2011-5-26 上午09:50:31
*/
public class StringAndDateConvertor {
public static final String DAY_FORMAT = "yyyy-MM-dd";
public static final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* string(格式为:"2010-10-01") -> Calendar
*/
public static class StringToDateDay extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (String.class.isInstance(src)) { // 必须是字符串
try {
return new SimpleDateFormat(DAY_FORMAT).parse((String) src);
} catch (ParseException e) {
throw new BeanMappingException("convert failed: [" + src + "," + destClass.getName() + "]", e);
}
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* string(格式为:"2010-10-01 00:00:00") -> Date
*/
public static class StringToDateTime extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (String.class.isInstance(src)) { // 必须是字符串
try {
return new SimpleDateFormat(TIME_FORMAT).parse((String) src);
} catch (ParseException e) {
throw new BeanMappingException("convert failed: [" + src + "," + destClass.getName() + "]", e);
}
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* Date -> string(格式为:"2010-10-01")
*/
public static class DateDayToString extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (Date.class.isInstance(src)) { // 必须是Date对象
return new SimpleDateFormat(DAY_FORMAT).format((Date) src);
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* Date -> string(格式为:"2010-10-01 00:00:00")
*/
public static class DateTimeToString extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (Date.class.isInstance(src)) { // 必须是Date对象
return new SimpleDateFormat(TIME_FORMAT).format((Date) src);
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* string(格式为:"2010-10-01") -> Calendar
*/
public static class StringToCalendarDay extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (String.class.isInstance(src)) { // 必须是字符串
Date dest = (Date) new StringToDateDay().convert(src, Date.class);
Calendar result = new GregorianCalendar();
result.setTime(dest);
return result;
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* string(格式为:"2010-10-01 00:00:00") -> Calendar
*/
public static class StringToCalendarTime extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (String.class.isInstance(src)) { // 必须是字符串
Date dest = (Date) new StringToDateTime().convert(src, Date.class);
Calendar result = new GregorianCalendar();
result.setTime(dest);
return result;
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* Calendar -> string(格式为:"2010-10-01")
*/
public static class CalendarDayToString extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (Calendar.class.isInstance(src)) { // 必须是Calendar
Calendar ca = (Calendar) src;
return new DateDayToString().convert(ca.getTime(), String.class);
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
/**
* Calendar -> string(格式为:"2010-10-01 00:00:00")
*/
public static class CalendarTimeToString extends AbastactConvertor {
@Override
public Object convert(Object src, Class destClass) {
if (Calendar.class.isInstance(src)) { // 必须是Calendar
Calendar ca = (Calendar) src;
return new DateTimeToString().convert(ca.getTime(), String.class);
}
throw new BeanMappingException("Unsupported convert: [" + src + "," + destClass.getName() + "]");
}
}
}