From 293cbd1d4c3b915d1ae1146035cf19584cfbef67 Mon Sep 17 00:00:00 2001 From: fujie <405295521@qq.com> Date: Mon, 6 Nov 2017 21:55:41 +0800 Subject: [PATCH] =?UTF-8?q?1.=E9=87=8D=E6=9E=84date=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=8C=E7=8E=B0=E5=9C=A8=E4=BB=85=E6=94=AF?= =?UTF-8?q?=E6=8C=81date=E7=B1=BB=E5=9E=8B=E3=80=82=EF=BC=88=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E4=BD=BF=E7=94=A8date=E5=87=BD=E6=95=B0=E8=BD=AC?= =?UTF-8?q?=E6=8D=A2=E6=97=A5=E6=9C=9F=E5=AF=B9=E8=B1=A1=EF=BC=892.?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=97=A5=E6=9C=9F=E8=BD=ACstring=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E3=80=823.=E9=87=8D=E6=9E=84=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E3=80=824.=E5=90=88=E5=B9=B6=E5=AD=97?= =?UTF-8?q?=E7=AC=A6=E4=B8=B2=E8=BD=AC=E6=97=A5=E6=9C=9F=E5=87=BD=E6=95=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/test/resources/example/date.ts | 26 ++++++---- .../tinyscript/expression/ExpressionUtil.java | 19 +------ .../expression/TypeConvertUtil.java | 49 +++++++++++-------- .../typeconvert/DateTypeConvertProcessor.java | 15 +----- .../StringTypeConvertProcessor.java | 27 ++++++++++ .../function/date/DateAddFunction.java | 4 +- .../function/date/DateDifferentFunction.java | 42 ++++++++-------- .../function/date/DateNameFunction.java | 9 ++-- .../function/date/DatePartFunction.java | 9 ++-- .../function/date/DateTruncFunction.java | 5 +- .../tinyscript/function/date/DateUtil.java | 33 +++++++++---- .../tinyscript/function/date/DayFunction.java | 3 +- .../function/date/IsDateFunction.java | 6 ++- .../function/date/MakeDateTime.java | 13 ++--- .../function/date/MonthFunction.java | 3 +- .../function/date/TodayFunction.java | 2 +- .../function/date/YearFunction.java | 3 +- .../org/tinygroup/tinyscript/DateTest.java | 30 ++++++------ 18 files changed, 158 insertions(+), 140 deletions(-) create mode 100644 org.tinygroup.tinyscriptbase/src/main/java/org/tinygroup/tinyscript/expression/typeconvert/StringTypeConvertProcessor.java diff --git a/org.tinygroup.tinyscript/src/test/resources/example/date.ts b/org.tinygroup.tinyscript/src/test/resources/example/date.ts index ffe74e0..d4856b1 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 0cb0a6e..a37e639 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 8fdde39..18b08a5 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 6b02845..aaafcd7 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 0000000..ea90190 --- /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 aabc1fb..a59ee93 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 7c4fcc1..b8aed3d 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 2410a5c..722c8e0 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 7611565..1590719 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 afa2c7d..a6cec2e 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 5ed026d..b3c156c 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 f02cdec..6743a20 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 8201232..56d4f06 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 1b9d3f2..93ba1b0 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 9ff18b5..7de8542 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 d67a5c5..ecc9472 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 43b5c6e..49cd3b6 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 1db3f77..c43315e 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\");")); } -- Gitee