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) {
this.instant = parseInstant(s, null, Locale.getDefault().toLanguageTag());
this.instant = parseInstant(s);
}
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) {
this.instant = parseInstant(s, pattern, locale);
this.instant = parseInstant(s, locale, pattern);
}
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) {
@ -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;
if (pattern != null) {
formatter = DateTimeFormatter.ofPattern(pattern, Locale.forLanguageTag(localeStr));
} else if (s.length() > 0 && Character.isDigit(s.charAt(0))) {
boolean isIsoFormat = s.length() > 0 && Character.isDigit(s.charAt(0));
if (isIsoFormat) {
// 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-04:00" TZ instant
@ -507,10 +506,7 @@ public class TbDate implements Serializable, Cloneable {
return Instant.from(formatter.parse(s));
} catch (Exception ex) {
try {
if (pattern != null) {
String zoneIdStr = ZoneId.systemDefault().getId();
return parseInstant(s, pattern, localeStr, zoneIdStr);
} else if (s.length() > 0 && Character.isDigit(s.charAt(0))) {
if (isIsoFormat) {
long timeMS = parse(s);
if (timeMS != -1) {
return Instant.ofEpochMilli(timeMS);
@ -523,6 +519,20 @@ public class TbDate implements Serializable, Cloneable {
// The offset ID without colons or seconds.
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) {
final ConversionException exception = new ConversionException("Cannot parse value [" + s + "] as instant", ex);
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);
}
@AfterAll
public static void tearDown() {
ParserContext.disableSandboxedMode();

Loading…
Cancel
Save