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