Browse Source

tbel fix_bug tbDate delete String... options

pull/9778/head
nick 3 years ago
parent
commit
3bf585ec80
  1. 34
      common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbDate.java
  2. 1
      common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateConstructorTest.java

34
common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbDate.java

@ -54,19 +54,19 @@ public class TbDate implements Serializable, Cloneable {
} }
public TbDate(String s) { public TbDate(String s) {
this.instant = parseInstant(s, null, Locale.getDefault().toLanguageTag()); this.instant = parseInstant(s);
} }
public TbDate(String s, String pattern) { public TbDate(String s, String pattern) {
this.instant = parseInstant(s, pattern, Locale.getDefault().toLanguageTag()); this.instant = parseInstant(s, Locale.getDefault().toLanguageTag(), pattern);
} }
public TbDate(String s, String pattern, String locale) { public TbDate(String s, String pattern, String locale) {
this.instant = parseInstant(s, pattern, locale); this.instant = parseInstant(s, locale, pattern);
} }
public TbDate(String s, String pattern, String locale, String zoneId) { public TbDate(String s, String pattern, String locale, String zoneId) {
this.instant = parseInstant(s, pattern, locale, zoneId); this.instant = parseInstant(s, pattern, locale, zoneId);
} }
public TbDate(long dateMilliSecond) { public TbDate(long dateMilliSecond) {
@ -487,11 +487,10 @@ public class TbDate implements Serializable, Cloneable {
} }
} }
private static Instant parseInstant(String s, String pattern, String localeStr) { private static Instant parseInstant(String s) {
DateTimeFormatter formatter; DateTimeFormatter formatter;
if (pattern != null) { boolean isIsoFormat = s.length() > 0 && Character.isDigit(s.charAt(0));
formatter = DateTimeFormatter.ofPattern(pattern, Locale.forLanguageTag(localeStr)); if (isIsoFormat) {
} else if (s.length() > 0 && Character.isDigit(s.charAt(0))) {
// assuming "2007-12-03T10:15:30.00Z" UTC instant // assuming "2007-12-03T10:15:30.00Z" UTC instant
// assuming "2007-12-03T10:15:30.00" ZoneId.systemDefault() instant // assuming "2007-12-03T10:15:30.00" ZoneId.systemDefault() instant
// assuming "2007-12-03T10:15:30.00-04:00" TZ instant // assuming "2007-12-03T10:15:30.00-04:00" TZ instant
@ -507,10 +506,7 @@ public class TbDate implements Serializable, Cloneable {
return Instant.from(formatter.parse(s)); return Instant.from(formatter.parse(s));
} catch (Exception ex) { } catch (Exception ex) {
try { try {
if (pattern != null) { if (isIsoFormat) {
String zoneIdStr = ZoneId.systemDefault().getId();
return parseInstant(s, pattern, localeStr, zoneIdStr);
} else if (s.length() > 0 && Character.isDigit(s.charAt(0))) {
long timeMS = parse(s); long timeMS = parse(s);
if (timeMS != -1) { if (timeMS != -1) {
return Instant.ofEpochMilli(timeMS); return Instant.ofEpochMilli(timeMS);
@ -523,6 +519,20 @@ public class TbDate implements Serializable, Cloneable {
// The offset ID without colons or seconds. // The offset ID without colons or seconds.
return getInstantWithLocalZoneOffsetId_RFC_1123(s); return getInstantWithLocalZoneOffsetId_RFC_1123(s);
} }
} catch (final DateTimeParseException e) {
final ConversionException exception = new ConversionException("Cannot parse value [" + s + "] as instant", e);
throw exception;
}
}
}
private static Instant parseInstant(String s, String localeStr, String pattern) {
try {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern, Locale.forLanguageTag(localeStr));
return Instant.from(formatter.parse(s));
} catch (Exception ex) {
try {
return parseInstant(s, pattern, localeStr, ZoneId.systemDefault().getId());
} catch (final DateTimeParseException e) { } catch (final DateTimeParseException e) {
final ConversionException exception = new ConversionException("Cannot parse value [" + s + "] as instant", ex); final ConversionException exception = new ConversionException("Cannot parse value [" + s + "] as instant", ex);
throw exception; throw exception;

1
common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateConstructorTest.java

@ -44,7 +44,6 @@ public class TbDateConstructorTest {
executionContext = new ExecutionContext(parserConfig, 5 * 1024 * 1024); executionContext = new ExecutionContext(parserConfig, 5 * 1024 * 1024);
} }
@AfterAll @AfterAll
public static void tearDown() { public static void tearDown() {
ParserContext.disableSandboxedMode(); ParserContext.disableSandboxedMode();

Loading…
Cancel
Save