package foundation.translator; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import foundation.server.config.DBaseType; import foundation.util.Util; public class DateTranslator extends ITranslator { private static String DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; private static String DateTimeFormat_Oracle = "yyyy-mm-dd hh24:mi:ss"; private static String DateFormat = "yyyy-MM-dd"; private DateFormat dateTimeFormater; private DateFormat dateFormater; public DateTranslator() { dateTimeFormater = new SimpleDateFormat(DateTimeFormat); dateFormater = new SimpleDateFormat(DateFormat); } public String toString(Object value) throws Exception { if (value == null || value == ValueType.Null) { return null; } Date date = (Date)value; return dateFormater.format(date); } public String toSqlString(DBaseType dbaseType, Object value) throws Exception { if (value == null || value == ValueType.Null) { return "null"; } Date date = toDate(value); if (dbaseType.isMySQL()) { return "\"" + dateFormater.format(date) + "\""; } else if (dbaseType.isSQLServer()) { return "'" + dateFormater.format(date) + "'"; } else if (dbaseType.isOracle()) { return "to_date(\'" + dateFormater.format(date) + "\', " + Util.quotedStr(DateTimeFormat_Oracle)+ ")"; } else { return "\"" + dateFormater.format(date) + "\""; } } public String toJSONString(Object value) throws Exception { if (value == null || value == ValueType.Null) { return "null"; } //1. 如果数据本身就是 Date, 按着Date转换 if (value instanceof Date) { Date date = (Date)value; return "\"" + dateFormater.format(date) + "\""; } //2. 如果数据是 String, 按着String转 if (value instanceof String) { return "\"" + (String)value + "\""; } //3. 如果数据是其他类型, 认为无法转换 return "null"; } public String toSchemaString(Object value) throws Exception { if (value == null || value == ValueType.Null) { return ""; } Date date = (Date)value; return "\"" + dateFormater.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 { if(object instanceof Long) { return new Date((Long)object); } else if (object instanceof String) { String value = (String) object; value = value.trim().replace('\\', '-').replace('/', '-'); Date parsedDate = null; int length = value.length(); if (length == 10) { value = value + " 00:00:00"; } if (length == 19 || length == 10) { parsedDate = dateTimeFormater.parse(value); } return parsedDate; } else if (object instanceof Date) { return (Date) object; } else if (object instanceof Double) { Long longValue = ((Double)object).longValue(); if (longValue >= 19500101 && longValue <= 21000101) { DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); return dateFormat.parse(String.valueOf(longValue)); } else { return new Date(longValue); } } else if (object instanceof Integer) { Integer value = (Integer)object; if (value >= 19500101 && value <= 21000101) { DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); return dateFormat.parse(String.valueOf(value)); } else { return null; } } else { return null; } } @Override public Object toTranslatorTypeValue(Object value) throws Exception { return toDate(value); } @Override public Object loadObjectFrom(String value) throws Exception { if (Util.isEmpty(value)) { return null; } return dateFormater.parse(value); } @Override public void setFormat(String format) { if (Util.isEmpty(format)) { format = DateTimeFormat; } this.format = format; dateFormater = new SimpleDateFormat(format); } @Override public Class getDataClass() { return Date.class; } public static void main(String[] args) throws ParseException { DateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd"); Date parsedDate = dateFormater.parse("2021-03-09"); System.out.println(parsedDate); } }