diff --git a/org.tinygroup.tinyscript/src/test/resources/example/date.ts b/org.tinygroup.tinyscript/src/test/resources/example/date.ts index ffe74e0da9b9aef73e4a1113359cf14f92a4b60f..d4856b12e7017bac68d79dece1e1769672f85995 100644 --- a/org.tinygroup.tinyscript/src/test/resources/example/date.ts +++ b/org.tinygroup.tinyscript/src/test/resources/example/date.ts @@ -1,14 +1,20 @@ -println(dateAdd("YEAR",1,"2017-10-31 11:1:1")); -println(datediff("WEEK","2017-10-31","2017-11-1","wednesday")); -println(dateName("MONTH","2017-10-31 11:1:1")); -println(datePart("WEEK","2017-10-31 11:1:1","monday")); -println(dateTrunc("WEEKDAY","2017-11-30 11:1:1")); -println(day("2017-11-30 11:1:1")); +date1 = date("2017-10-31 11:1:1","yyyy-MM-dd HH:mm:ss"); +date2 = date("2017-11-2","yyyy-MM-dd"); +time = date("11:1:2","HH:mm:ss"); +println(dateAdd("YEAR",1,date1)); +println(dateAdd("year",2,date1)); +println(dateDiff("WEEK",date1,date2,"wednesday")); +println(dateName("WEEKDAY",date1)); +println(datePart("WEEK",date1,"monday")); +println(dateTrunc("WEEKDAY",date1)); +println(day(date1)); println(isDate("2017/11/30")); +println(isDate("2017/11/30","yyyy/MM/dd")); println(makeDate(2010,10,1)); -println(makeDateTime("2016-1-1","11:1:1")); -println(month("2016-12-1")); -println(year("2017-12-1")); +println(makeDateTime(date2,time)); +println(month(date1)); +println(year(date1)); println(now()); println(today()); -println(max("2017-12-1","2017-12-1 11:1:59")); \ No newline at end of file +println(max(date1,date2)); +println(string(date1,"yyyy/MM/dd")); \ No newline at end of file diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/ExpressionUtil.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/ExpressionUtil.java index 0cb0a6e3e0c5c606dc1a79ae47af3ac72aecc60e..a37e6398df217178e6b9e8159fdb701b5ba41791 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/ExpressionUtil.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/ExpressionUtil.java @@ -2,11 +2,8 @@ package org.tinygroup.tinyscript.expression; import java.lang.reflect.Array; import java.math.BigDecimal; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -265,21 +262,7 @@ public final class ExpressionUtil { } } - public static Date convertDate(Object date) throws ParseException { - if(date instanceof Date) { - return (Date)date; - } - String strDate = (String)date; - SimpleDateFormat sdf; - if (strDate.indexOf("-") > 0) { - sdf = strDate.indexOf(":") > 0 ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") - : new SimpleDateFormat("yyyy-MM-dd"); - } else { - sdf = strDate.indexOf(":") > 0 ? new SimpleDateFormat("yyyy/MM/dd HH:mm:ss") - : new SimpleDateFormat("yyyy/MM/dd"); - } - return sdf.parse(strDate); - } + public static Double convertDouble(Object value) throws ScriptException { return (Double) convert(value, Double.class); diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/TypeConvertUtil.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/TypeConvertUtil.java index 8fdde393ce418ee52dcdf2c3f7111ed74f0ddb2f..18b08a555629e394b2221772733e34384da189d1 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/TypeConvertUtil.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/TypeConvertUtil.java @@ -11,71 +11,78 @@ import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; /** * 可扩展的类型转换工具类 + * * @author yancheng11334 * */ public final class TypeConvertUtil { - - private static Map processorMap = new HashMap(); - - private TypeConvertUtil(){ - + + private static Map processorMap = new HashMap(); + + private TypeConvertUtil() { + } - - static{ + + static { addTypeConvertProcessor(new IntegerTypeConvertProcessor()); addTypeConvertProcessor(new LongTypeConvertProcessor()); addTypeConvertProcessor(new FloatTypeConvertProcessor()); addTypeConvertProcessor(new DoubleTypeConvertProcessor()); addTypeConvertProcessor(new DateTypeConvertProcessor()); + addTypeConvertProcessor(new StringTypeConvertProcessor()); } - + /** * 注册类型处理器 + * * @param processor */ - public static void addTypeConvertProcessor(TypeConvertProcessor processor){ - processorMap.put(processor.getName(),processor); + public static void addTypeConvertProcessor(TypeConvertProcessor processor) { + processorMap.put(processor.getName(), processor); } - + /** * 卸载类型处理器 + * * @param processor */ - public static void removeTypeConvertProcessor(TypeConvertProcessor processor){ + public static void removeTypeConvertProcessor(TypeConvertProcessor processor) { processorMap.remove(processor.getName()); } - + /** * 存在指定类型 + * * @param type * @return */ - public static boolean exsitType(String type){ + public static boolean exsitType(String type) { return processorMap.containsKey(type); } - + /** * 获得存在的类型 + * * @return */ - public static List getTypes(){ + public static List getTypes() { return new ArrayList(processorMap.keySet()); } - + /** * 执行指定类型的转换逻辑 + * * @param type * @param parameters * @return * @throws Exception */ - public static Object convert(String type,Object...parameters) throws Exception{ + public static Object convert(String type, Object... parameters) throws Exception { TypeConvertProcessor processor = processorMap.get(type); - if(processor==null){ - throw new ScriptException(ResourceBundleUtil.getDefaultMessage("type.convert.error", type)); + if (processor == null) { + throw new ScriptException(ResourceBundleUtil.getDefaultMessage("type.convert.error", type)); } return processor.convert(parameters); } - + } diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/DateTypeConvertProcessor.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/DateTypeConvertProcessor.java index 6b02845a265c48c4c96dc73a358658f5e31c76f7..aaafcd7261c9f139da8b2fb23e31d6bfcf3fa087 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/DateTypeConvertProcessor.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/DateTypeConvertProcessor.java @@ -1,12 +1,11 @@ package org.tinygroup.tinyscript.expression.typeconvert; -import java.text.DateFormat; -import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.expression.TypeConvertProcessor; +import org.tinygroup.tinyscript.function.date.DateUtil; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; /** @@ -33,7 +32,7 @@ public class DateTypeConvertProcessor implements TypeConvertProcessor { protected Date convertDate(Object obj, String rule) throws Exception { if (obj instanceof String) { - return convertDateByString((String) obj, rule); + return DateUtil.convertDateByString((String) obj, rule); } else if (obj instanceof Long) { return new Date((Long) obj); } else if (obj instanceof Date) { @@ -44,14 +43,4 @@ public class DateTypeConvertProcessor implements TypeConvertProcessor { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("number.convert.error", obj.getClass().getName(),Date.class.getName())); } } - - private Date convertDateByString(String s, String rule) throws Exception { - DateFormat format; - if (rule != null) { - format = new SimpleDateFormat(rule); - } else { - format = new SimpleDateFormat(); - } - return format.parse(s); - } } diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/StringTypeConvertProcessor.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/StringTypeConvertProcessor.java new file mode 100644 index 0000000000000000000000000000000000000000..ea9019035e555586e718a66cde81dd20be918351 --- /dev/null +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/StringTypeConvertProcessor.java @@ -0,0 +1,27 @@ +package org.tinygroup.tinyscript.expression.typeconvert; + +import java.util.Date; + +import org.tinygroup.tinyscript.expression.TypeConvertProcessor; +import org.tinygroup.tinyscript.function.date.DateUtil; + +public class StringTypeConvertProcessor implements TypeConvertProcessor { + + @Override + public String getName() { + return "string"; + } + + @Override + public Object convert(Object... parameters) throws Exception { + if (parameters != null) { + if (parameters.length == 1) { + return DateUtil.dateToString((Date) parameters[0], null); + } else if (parameters.length == 2) { + return DateUtil.dateToString((Date) parameters[0], (String) parameters[1]); + } + } + return null; + } + +} diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateAddFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateAddFunction.java index aabc1fb96bf5c72e98229ded819e2f75b5113fb6..a59ee931018db858cc4fbe59ac7a371fa1e39c98 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateAddFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateAddFunction.java @@ -24,9 +24,9 @@ public class DateAddFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 3)) { - DateEnum datePart = DateEnum.valueOf((String) parameters[0]); + DateEnum datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); Integer interval = ExpressionUtil.convertInteger(parameters[1]); - Date date = ExpressionUtil.convertDate(parameters[2]); + Date date = (Date) parameters[2]; Calendar newDate = Calendar.getInstance(); newDate.setTime(date); newDate.set(datePart.getCalendarId(), newDate.get(datePart.getCalendarId()) + interval); diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateDifferentFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateDifferentFunction.java index 7c4fcc1541bcea3adb2b4b8923730e8901da2da9..b8aed3db842d393d587e0f84587c4f41022cd717 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateDifferentFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateDifferentFunction.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -20,49 +19,50 @@ import org.tinygroup.tinyscript.interpret.exception.NotMatchException; public class DateDifferentFunction extends AbstractScriptFunction { public String getNames() { - return "datediff"; + return "dateDiff"; } public Object execute(ScriptSegment segment, ScriptContext context, Object... parameters) throws ScriptException { DateEnum datePart = null; - Date d1 = null; - Date d2 = null; - Calendar c1 = Calendar.getInstance(); - Calendar c2 = Calendar.getInstance(); + Date date1 = null; + Date date2 = null; + Calendar cal1 = Calendar.getInstance(); + Calendar cal2 = Calendar.getInstance(); String startWeekDay = null; try { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 3)) { - datePart = DateEnum.valueOf((String) parameters[0]); - d1 = ExpressionUtil.convertDate(parameters[1]); - d2 = ExpressionUtil.convertDate(parameters[2]); + datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); + date1 = (Date) parameters[1]; + date2 = (Date) parameters[2]; } else if (checkParameters(parameters, 4)) { - datePart = DateEnum.valueOf((String) parameters[0]); - d1 = ExpressionUtil.convertDate(parameters[1]); - d2 = ExpressionUtil.convertDate(parameters[2]); + datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); + date1 = (Date) parameters[1]; + date2 = (Date) parameters[2]; startWeekDay = (String) parameters[3]; } else { throw new NotMatchException( ResourceBundleUtil.getDefaultMessage("function.parameter.error", getNames())); } - c1.setTime(d1); - c2.setTime(d2); + cal1.setTime(date1); + cal2.setTime(date2); switch (datePart) { case YEAR: case MONTH: case WEEKDAY: - return c1.get(datePart.getCalendarId()) - c2.get(datePart.getCalendarId()); + return cal2.get(datePart.getCalendarId()) - cal2.get(datePart.getCalendarId()); case WEEK: - return DateUtil.countWeekDiff(c1, c2, startWeekDay); + System.out.println(cal1.getTime()); + return DateUtil.countWeekDiff(cal1, cal2, startWeekDay); case DAY: - return (d1.getTime() - d2.getTime()) / (1000 * 60 * 60 * 24); + return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60 * 24); case HOUR: - return (d1.getTime() - d2.getTime()) / (1000 * 60 * 60); + return (date1.getTime() - date2.getTime()) / (1000 * 60 * 60); case MINUTE: - return (d1.getTime() - d2.getTime()) / (1000 * 60); + return (date1.getTime() - date2.getTime()) / (1000 * 60); case SECOND: - return (d1.getTime() - d2.getTime()) / 1000; + return (date1.getTime() - date2.getTime()) / 1000; } return null; } catch (ScriptException e) { @@ -72,6 +72,4 @@ public class DateDifferentFunction extends AbstractScriptFunction { } } - - } diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateNameFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateNameFunction.java index 2410a5caff2e2598f174f319ea9d607b0b3e3781..722c8e04c41eba8df10181e2978ae25fedf90423 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateNameFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateNameFunction.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -28,12 +27,12 @@ public class DateNameFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 2)) { - datePart = DateEnum.valueOf((String) parameters[0]); - Date date = ExpressionUtil.convertDate(parameters[1]); + datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); + Date date = (Date) parameters[1]; cal.setTime(date); } else if (checkParameters(parameters, 3)) { - datePart = DateEnum.valueOf((String) parameters[0]); - Date date = ExpressionUtil.convertDate(parameters[1]); + datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); + Date date = (Date) parameters[1]; startWeekDay = (String) parameters[2]; cal.setTime(date); } else { diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DatePartFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DatePartFunction.java index 7611565f68821554fe4c312c19826b26dcb0169b..15907196a22286088745d1b55323434d94e00b8b 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DatePartFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DatePartFunction.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -27,12 +26,12 @@ public class DatePartFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 2)) { - datePart = DateEnum.valueOf((String) parameters[0]); - Date date = ExpressionUtil.convertDate(parameters[1]); + datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); + Date date = (Date) parameters[1]; cal.setTime(date); } else if (checkParameters(parameters, 3)) { - datePart = DateEnum.valueOf((String) parameters[0]); - Date date = ExpressionUtil.convertDate(parameters[1]); + datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); + Date date = (Date) parameters[1]; startWeekDay = (String) parameters[2]; cal.setTime(date); } else { diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateTruncFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateTruncFunction.java index afa2c7dc2fc8761cbc8e2b4b67760f90bacf694c..a6cec2ea858c51f99d238c7ef27c0cb5e3085bc8 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateTruncFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateTruncFunction.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -26,8 +25,8 @@ public class DateTruncFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 2)) { - datePart = DateEnum.valueOf((String) parameters[0]); - Date date = ExpressionUtil.convertDate(parameters[1]); + datePart = DateEnum.valueOf(((String) parameters[0]).toUpperCase()); + Date date = (Date) parameters[1]; cal.setTime(date); } else { throw new NotMatchException( diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateUtil.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateUtil.java index 5ed026d1e7eb008bd9aec3ab5c789a25620e3495..b3c156c4f045fd97f252823f543689a48821f1e8 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateUtil.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DateUtil.java @@ -1,12 +1,12 @@ package org.tinygroup.tinyscript.function.date; import java.text.DateFormat; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; -import java.util.Locale; public class DateUtil { private static final List weekDays = new ArrayList(); @@ -19,7 +19,7 @@ public class DateUtil { weekDays.add("friday"); weekDays.add("saturday"); } - + public static String getWeekday(int index) { return weekDays.get(index); } @@ -27,19 +27,17 @@ public class DateUtil { public static int getWeekDay(String weekDay) { return weekDays.indexOf(weekDay); } - + public static int countWeekDiff(Calendar c1, Calendar c2, String startWeekDay) { int diffWeeks = 0; startWeekDay = startWeekDay == null ? "sunday" : startWeekDay; if (c1.get(Calendar.DAY_OF_WEEK) > 1 + getWeekDay(startWeekDay)) { - c1.set(Calendar.DATE, - c1.get(Calendar.DATE) + 8 - c1.get(Calendar.DAY_OF_WEEK) + getWeekDay(startWeekDay)); + c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 8 - c1.get(Calendar.DAY_OF_WEEK) + getWeekDay(startWeekDay)); if (c1.getTimeInMillis() <= c2.getTimeInMillis()) { diffWeeks = 1; } } else if (c1.get(Calendar.DAY_OF_WEEK) < 1 + getWeekDay(startWeekDay)) { - c1.set(Calendar.DATE, - c1.get(Calendar.DATE) + 1 - c1.get(Calendar.DAY_OF_WEEK) + getWeekDay(startWeekDay)); + c1.set(Calendar.DATE, c1.get(Calendar.DATE) + 1 - c1.get(Calendar.DAY_OF_WEEK) + getWeekDay(startWeekDay)); if (c1.getTimeInMillis() <= c2.getTimeInMillis()) { diffWeeks = 1; } @@ -51,8 +49,23 @@ public class DateUtil { return daysDiff / 7 + diffWeeks; } - public static String dateToString(Date date,String format) { - DateFormat df = new SimpleDateFormat(format, Locale.ENGLISH); - return df.format(date); + public static Date convertDateByString(String s, String rule) throws ParseException { + DateFormat format; + if (rule != null) { + format = new SimpleDateFormat(rule); + } else { + format = new SimpleDateFormat(); + } + return format.parse(s); + } + + public static String dateToString(Date date, String rule) { + DateFormat dateFormat; + if (rule != null) { + dateFormat = new SimpleDateFormat(rule); + } else { + dateFormat = new SimpleDateFormat(); + } + return dateFormat.format(date); } } diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DayFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DayFunction.java index f02cdecb6d58835a3097dcaa92734d07df04ef30..6743a20c54cd44475a24100a9ad8b0edf9f7cb58 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DayFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/DayFunction.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -25,7 +24,7 @@ public class DayFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 1)) { - Date date = ExpressionUtil.convertDate(parameters[0]); + Date date = (Date) parameters[0]; cal.setTime(date); return cal.get(Calendar.DAY_OF_MONTH); } else { diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/IsDateFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/IsDateFunction.java index 82012320df66933b8230e6664db81583ef981203..56d4f067b1c5384a175f66a8b203df22726497d1 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/IsDateFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/IsDateFunction.java @@ -5,7 +5,6 @@ import java.text.ParseException; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -23,7 +22,10 @@ public class IsDateFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 1)) { - ExpressionUtil.convertDate(parameters[0]); + DateUtil.convertDateByString((String) parameters[0], null); + return true; + } else if (checkParameters(parameters, 2)) { + DateUtil.convertDateByString((String) parameters[0], (String) parameters[1]); return true; } else { throw new NotMatchException( diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MakeDateTime.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MakeDateTime.java index 1b9d3f252419e678e42acb2d869d01332d46cf0b..93ba1b09ea93a52375f9dfc69d6dce5cf5fca317 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MakeDateTime.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MakeDateTime.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -25,12 +24,14 @@ public class MakeDateTime extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 2)) { - Date date = ExpressionUtil.convertDate(parameters[0]); - String[] times = ((String) parameters[1]).split(":"); + Date date = (Date) parameters[0]; + Date time = (Date) parameters[1]; + Calendar timeCal = Calendar.getInstance(); + timeCal.setTime(time); cal.setTime(date); - cal.set(Calendar.HOUR, Integer.parseInt(times[0])); - cal.set(Calendar.MINUTE, Integer.parseInt(times[1])); - cal.set(Calendar.SECOND, Integer.parseInt(times[2])); + cal.set(Calendar.HOUR, timeCal.get(Calendar.HOUR)); + cal.set(Calendar.MINUTE, timeCal.get(Calendar.MINUTE)); + cal.set(Calendar.SECOND, timeCal.get(Calendar.SECOND)); return cal.getTime(); } else { throw new NotMatchException( diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MonthFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MonthFunction.java index 9ff18b5414f653f4e4031339f2cca448d6e5b3dd..7de85428f4bbd8e5c786eeefdd1ec8433e4054af 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MonthFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/MonthFunction.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -24,7 +23,7 @@ public class MonthFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 1)) { - Date date = ExpressionUtil.convertDate(parameters[0]); + Date date = (Date) parameters[0]; Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.MONTH) + 1; diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/TodayFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/TodayFunction.java index d67a5c52ecf8a7da81b46bdb514ffdad33d65476..ecc9472e75a85155ef347b8203dab9a56dee104d 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/TodayFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/TodayFunction.java @@ -18,7 +18,7 @@ public class TodayFunction extends AbstractScriptFunction { @Override public Object execute(ScriptSegment segment, ScriptContext context, Object... parameters) throws ScriptException { try { - return DateUtil.dateToString(new Date(),"yyyy-MM-dd"); + return DateUtil.dateToString(new Date(),"yyyy/MM/dd"); } catch (Exception e) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.run.error", getNames()), e); } diff --git a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/YearFunction.java b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/YearFunction.java index 43b5c6e9398264be043ef3b334d366c221bef785..49cd3b67f5a582ca2cb90310eea2893c3944c4e0 100644 --- a/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/YearFunction.java +++ b/org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/function/date/YearFunction.java @@ -6,7 +6,6 @@ import java.util.Date; import org.tinygroup.tinyscript.ScriptContext; import org.tinygroup.tinyscript.ScriptException; import org.tinygroup.tinyscript.ScriptSegment; -import org.tinygroup.tinyscript.expression.ExpressionUtil; import org.tinygroup.tinyscript.function.AbstractScriptFunction; import org.tinygroup.tinyscript.interpret.ResourceBundleUtil; import org.tinygroup.tinyscript.interpret.exception.NotMatchException; @@ -24,7 +23,7 @@ public class YearFunction extends AbstractScriptFunction { if (parameters == null || parameters.length == 0) { throw new ScriptException(ResourceBundleUtil.getDefaultMessage("function.parameter.empty", getNames())); } else if (checkParameters(parameters, 1)) { - Date date = ExpressionUtil.convertDate(parameters[0]); + Date date = (Date) parameters[0]; Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.YEAR); diff --git a/org.tinygroup.tinyscriptbase/src/test/java/org/tinygroup/tinyscript/DateTest.java b/org.tinygroup.tinyscriptbase/src/test/java/org/tinygroup/tinyscript/DateTest.java index 1db3f771dc9006d14af609846160a579ea279702..c43315eeae93e441ab337dbce1ce61619cb4da78 100644 --- a/org.tinygroup.tinyscriptbase/src/test/java/org/tinygroup/tinyscript/DateTest.java +++ b/org.tinygroup.tinyscriptbase/src/test/java/org/tinygroup/tinyscript/DateTest.java @@ -8,6 +8,7 @@ import java.util.Date; import junit.framework.TestCase; +import org.tinygroup.tinyscript.function.date.DateUtil; import org.tinygroup.tinyscript.impl.DefaultScriptContext; import org.tinygroup.tinyscript.impl.DefaultScriptEngine; @@ -20,16 +21,6 @@ public class DateTest extends TestCase { scriptEngine.start(); } - public void testDateDiff() throws Exception { - Timestamp t1 = Timestamp.valueOf("2017-04-28 00:00:13.0"); - Timestamp t2 = Timestamp.valueOf("2017-04-27 23:59:59.0"); - ScriptContext context = new DefaultScriptContext(); - context.put("t1", t1); - context.put("t2", t2); - - assertEquals(14L, scriptEngine.execute("return datediff(\"SECOND\",t1,t2);", context)); - } - public void testEqualsDate() throws Exception { Timestamp t1 = Timestamp.valueOf("2017-04-28 00:00:13.0"); Timestamp t2 = Timestamp.valueOf("2017-04-27 23:59:59.0"); @@ -44,16 +35,23 @@ public class DateTest extends TestCase { } public void testTableau() throws ScriptException, ParseException { + Date date1 = DateUtil.convertDateByString("2017-10-31 11:1:1", "yyyy-MM-dd HH:mm:ss"); + Date date2 = DateUtil.convertDateByString("2017-11-2", "yyyy-MM-dd"); + ScriptContext context = new DefaultScriptContext(); + context.put("date1", date1); + context.put("date2", date2); + assertNotNull(scriptEngine.execute("return now();")); assertNotNull(scriptEngine.execute("return today();")); + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = dateFormat.parse("2018-10-31 11:1:1"); - assertEquals(date, scriptEngine.execute("return dateAdd(\"YEAR\",1,\"2017-10-31 11:1:1\");")); - assertEquals(1, scriptEngine.execute("return datediff(\"WEEK\",\"2017-10-31\",\"2017-11-1\",\"wednesday\");")); - assertEquals("Oct", scriptEngine.execute("return dateName(\"MONTH\",\"2017-10-31 11:1:1\");")); - assertEquals(44, scriptEngine.execute("return datePart(\"WEEK\",\"2017-10-31 11:1:1\",\"monday\");")); - assertNotNull(scriptEngine.execute("return dateTrunc(\"WEEKDAY\",\"2017-11-30 11:1:1\");")); - assertEquals(true, scriptEngine.execute("return isDate(\"2017/11/30\");")); + assertEquals(date, scriptEngine.execute("return dateAdd(\"YEAR\",1,date1);", context)); + assertEquals(1, scriptEngine.execute("return dateDiff(\"WEEK\",date1,date2,\"wednesday\");", context)); + assertEquals("tuesday", scriptEngine.execute("return dateName(\"WEEKDAY\",date1);", context)); + assertEquals(44, scriptEngine.execute("return datePart(\"WEEK\",date1,\"monday\");", context)); + assertNotNull(scriptEngine.execute("return dateTrunc(\"WEEKDAY\",date1);", context)); + assertEquals(false, scriptEngine.execute("return isDate(\"2017/11/30\");")); }