package frame.variant.translator; import frame.util.Util; import frame.variant.ValueType; import frame.variant.Value; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class DateTranslator extends ITranslator { private static String DefaultFormat = "yyyy-MM-dd HH:mm:ss"; private DateFormat dateFormat; public DateTranslator() { dateFormat = new SimpleDateFormat(DefaultFormat); } public String toString(Object value) throws Exception { if (value == null) { return null; } Date date = (Date)value; return dateFormat.format(date); } public String toSqlString(Object value) throws Exception { if (value == null) { return "null"; } Date date = toDate(value); return Util.quotedStr(dateFormat.format(date)); } public String toJSONString(Object value) throws Exception { if (value == null) { return "null"; } Date date = (Date)value; return "\"" + dateFormat.format(date) + "\""; } public String toSchemaString(Object value) throws Exception { if (value == null) { return ""; } Date date = (Date)value; return "\"" + dateFormat.format(date) + "\""; } @Override public Integer toInteger(Object object) throws Exception { throw new Exception("can not translate date (" + object + ") to Integer"); } @Override public Double toDouble(Object object) throws Exception { throw new Exception("can not translate date (" + object + ") to Double"); } @Override public BigDecimal toBigDecimal(Object object) throws Exception { throw new Exception("can not translate date (" + object + ") to BigDecimal"); } @Override public Boolean toBoolean(Object object) throws Exception { throw new Exception("can not translate date (" + object + ") to BigDecimal"); } @Override public Date toDate(Object object) throws Exception { // 只能接受 long(Timestamp) date string if(object instanceof Long) { return new Date((Long)object); } else if (object instanceof String) { Date parsedDate = dateFormat.parse((String) object); return parsedDate; } else if (object instanceof Date) { return (Date) object; } else { throw new Exception("can not parse to date"); } } @Override public Object toTranslatorTypeValue(Object value) throws Exception { return toDate(value); } @Override public Object loadObjectFrom(String value) throws Exception { if (Util.isEmptyStr(value)) { return null; } return dateFormat.parse(value); } @Override public Value loadVariantFrom(String value) throws Exception { Object object = loadObjectFrom(value); Value variant = new Value(); variant.setData(object, ValueType.Date); return variant; } @Override public Value loadVariantFrom(String value, Object defaultValue) { try { return loadVariantFrom(value); } catch (Exception e) { Value variant = new Value(); variant.setData(defaultValue, ValueType.Date); return variant; } } @Override public void setFormat(String format) { if (Util.isEmptyStr(format)) { format = DefaultFormat; } this.format = format; dateFormat = new SimpleDateFormat(format); } @Override public Class getDataClass() { return Date.class; } }