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;
|
}
|
}
|