From b58befc4a008cbbc6f886c1cf8adf77e0be5b809 Mon Sep 17 00:00:00 2001 From: nick Date: Tue, 5 Dec 2023 22:21:20 +0200 Subject: [PATCH] tbel fix_bug tbDate from String without TZ --- .../thingsboard/script/api/tbel/TbDate.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbDate.java b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbDate.java index f06d4cec53..347f85e563 100644 --- a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbDate.java +++ b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbDate.java @@ -490,8 +490,18 @@ public class TbDate implements Serializable, Cloneable { private static Instant parseInstant(String s) { try{ if (s.length() > 0 && Character.isDigit(s.charAt(0))) { - // assuming UTC instant "2007-12-03T10:15:30.00Z" - return OffsetDateTime.parse(s).toInstant(); + // 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 + // assuming "2007-12-03T10:15:30.00+04:00" TZ instant + Instant inst = validateDateWithTZ(s); + if (inst == null) { + LocalDateTime dt = LocalDateTime.parse(s); + return parseInstant(dt.getYear(), dt.getMonthValue(), dt.getDayOfMonth(), dt.getHour(), dt.getMinute(), + dt.getSecond(),dt.getNano()/1000000, ZoneId.systemDefault()); + } else { + return inst; + } } else { // assuming RFC-1123 value "Tue, 3 Jun 2008 11:05:30 GMT-02:00" @@ -514,4 +524,12 @@ public class TbDate implements Serializable, Cloneable { ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId); return zonedDateTime.toInstant(); } + + private static Instant validateDateWithTZ(String s) { + try { + return OffsetDateTime.parse(s).toInstant(); + } catch (DateTimeParseException e) { + return null; + } + } }