11package toolgood .algorithm ;
22
3- import java .math .BigDecimal ;
4- import java .util .ArrayList ;
5- import java .util .List ;
6- import java .util .Map ;
7- import java .util .TreeMap ;
8-
93import org .antlr .v4 .runtime .CharStreams ;
104import org .antlr .v4 .runtime .CommonTokenStream ;
115import org .joda .time .DateTime ;
12-
13- import toolgood .algorithm .internals .AntlrCharStream ;
14- import toolgood .algorithm .internals .AntlrErrorListener ;
15- import toolgood .algorithm .internals .CharUtil ;
16- import toolgood .algorithm .internals .ConditionCacheInfo ;
17- import toolgood .algorithm .internals .MathSimplifiedFormulaVisitor ;
18- import toolgood .algorithm .internals .MathVisitor ;
6+ import org .joda .time .DateTimeZone ;
7+ import toolgood .algorithm .internals .*;
198import toolgood .algorithm .litJson .JsonData ;
209import toolgood .algorithm .litJson .JsonMapper ;
2110import toolgood .algorithm .math .mathLexer ;
2211import toolgood .algorithm .math .mathParser ;
2312import toolgood .algorithm .math .mathParser .ProgContext ;
2413
14+ import java .math .BigDecimal ;
15+ import java .util .ArrayList ;
16+ import java .util .List ;
17+ import java .util .Map ;
18+ import java .util .TreeMap ;
19+
2520/**
2621 * 算法引擎 扩展版
2722 * 支持 一层算法 内套 一层算法
@@ -52,6 +47,10 @@ public class AlgorithmEngineEx {
5247 * 跳过公式错误
5348 */
5449 public Boolean JumpFormulaError = false ;
50+ /**
51+ * 使用本地时区
52+ */
53+ public Boolean UseLocalTime = false ;
5554 private final Map <String , Operand > _tempdict ;
5655 private ConditionCache MultiConditionCache ;
5756
@@ -125,7 +124,7 @@ public void ClearParameters() {
125124
126125 /**
127126 * 执行
128- *
127+ *
129128 * @param categoryName
130129 * @return
131130 */
@@ -175,7 +174,7 @@ public Operand EvaluateCategory(String categoryName) {
175174
176175 /**
177176 * 查找备注
178- *
177+ *
179178 * @param categoryName
180179 * @return
181180 * @throws Exception
@@ -369,6 +368,7 @@ public double TryEvaluateCategory(final String categoryName, final double defval
369368 }
370369 return defvalue ;
371370 }
371+
372372 public long TryEvaluateCategory (final String categoryName , final long defvalue ) {
373373 try {
374374 Operand obj = EvaluateCategory (categoryName );
@@ -425,7 +425,10 @@ public DateTime TryEvaluateCategory(final String categoryName, final DateTime de
425425 LastError = obj .ErrorMsg ();
426426 return defvalue ;
427427 }
428- return obj .DateValue ().ToDateTime ();
428+ if (UseLocalTime ) {
429+ return obj .DateValue ().ToDateTime (DateTimeZone .getDefault ());
430+ }
431+ return obj .DateValue ().ToDateTime (DateTimeZone .UTC );
429432 } catch (final Exception ex ) {
430433 LastError = ex .getMessage ();
431434 }
@@ -446,6 +449,7 @@ public MyDate TryEvaluateCategory(final String categoryName, final MyDate defval
446449 }
447450 return defvalue ;
448451 }
452+
449453 public BigDecimal TryEvaluate (final String exp , final BigDecimal defvalue ) {
450454 try {
451455 Operand obj = Evaluate (exp );
@@ -490,6 +494,7 @@ public double TryEvaluate(final String exp, final double defvalue) {
490494 }
491495 return defvalue ;
492496 }
497+
493498 public long TryEvaluate (final String exp , final long defvalue ) {
494499 try {
495500 Operand obj = Evaluate (exp );
@@ -546,7 +551,10 @@ public DateTime TryEvaluate(final String exp, final DateTime defvalue) {
546551 LastError = obj .ErrorMsg ();
547552 return defvalue ;
548553 }
549- return obj .DateValue ().ToDateTime ();
554+ if (UseLocalTime ) {
555+ return obj .DateValue ().ToDateTime (DateTimeZone .getDefault ());
556+ }
557+ return obj .DateValue ().ToDateTime (DateTimeZone .UTC );
550558 } catch (final Exception ex ) {
551559 LastError = ex .getMessage ();
552560 }
@@ -582,6 +590,7 @@ private Operand EvaluateCategory(ProgContext context) {
582590 visitor .DiyFunction = f -> {
583591 return ExecuteDiyFunction (f .Name , f .OperandList );
584592 };
593+ visitor .useLocalTime = UseLocalTime ;
585594 return visitor .visit (context );
586595 } catch (Exception ex ) {
587596 LastError = ex .getMessage ();
@@ -591,9 +600,8 @@ private Operand EvaluateCategory(ProgContext context) {
591600
592601 /**
593602 * 获取简化公式
594- *
603+ *
595604 * @param formula 公式
596- *
597605 */
598606 public String GetSimplifiedFormula (final String formula ) {
599607 try {
@@ -610,6 +618,7 @@ public String GetSimplifiedFormula(final String formula) {
610618 visitor .DiyFunction = f -> {
611619 return ExecuteDiyFunction (f .Name , f .OperandList );
612620 };
621+ visitor .useLocalTime = UseLocalTime ;
613622 Operand obj = visitor .visit (_context );
614623 obj = obj .ToText ("It can't be converted to String!" );
615624 if (obj .IsError ()) {
@@ -626,7 +635,7 @@ public String GetSimplifiedFormula(final String formula) {
626635
627636 /**
628637 * 计算公式
629- *
638+ *
630639 * @param formula 公式
631640 * @param splitChar 分隔符
632641 * @return
@@ -641,7 +650,7 @@ public String EvaluateFormula(String formula, Character splitChar) {
641650
642651 /**
643652 * 计算公式
644- *
653+ *
645654 * @param formula 公式
646655 * @param splitChars 分隔符
647656 * @return
0 commit comments