From bc5a1b4be9ed7ead4e676c3189c3cc1ebce32afe Mon Sep 17 00:00:00 2001 From: nick Date: Mon, 4 Dec 2023 22:22:31 +0200 Subject: [PATCH] tbel fix_bug tbDate Default zoneId - ZoneId.systemDefault() --- .../thingsboard/script/api/tbel/TbDate.java | 2 +- .../script/api/tbel/TbDateTest.java | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 7 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 71ee73de30..2cfd8db09f 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 @@ -58,7 +58,7 @@ public class TbDate implements Serializable, Cloneable { } public TbDate(String s, String pattern, Locale locale) { - instant = parseInstant(s, pattern, locale, zoneIdUTC); + instant = parseInstant(s, pattern, locale, ZoneId.systemDefault()); } public TbDate(String s, String pattern, Locale locale, String zoneIdStr) { ZoneId zoneId = ZoneId.of(zoneIdStr); diff --git a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java index ecb08b925c..5fd5fea277 100644 --- a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java +++ b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbDateTest.java @@ -153,15 +153,25 @@ class TbDateTest { @Test void testToLocaleDateString() { - String s = "09:15:30 PM, Sun 10/09/2022"; + String s = "02:15:30 PM, Sun 10/09/2022"; String pattern = "hh:mm:ss a, EEE M/d/uuuu"; TbDate d = new TbDate(s, pattern, Locale.US); - Assert.assertEquals("2022-10-09T21:15:30Z", d.toISOString()); + // tz = local + int localOffsetHrs = ZoneId.systemDefault().getRules().getOffset(d.getInstant()).getTotalSeconds()/60/60; + int hrs = 14 - localOffsetHrs; + String expected = "2022-10-09T" + hrs + ":15:30Z"; + Assert.assertEquals(expected, d.toISOString()); + // tz = "-04:00" + s = "2023-08-06T04:04:05.00-04:00"; + d = new TbDate(s); + Assert.assertEquals("2023-08-06T08:04:05Z", d.toISOString()); + + s = "02:15:30 PM, Sun 10/09/2022"; d = new TbDate(s, pattern, Locale.US, "-04:00"); - Assert.assertEquals("2022-10-10T01:15:30Z", d.toISOString()); + Assert.assertEquals("2022-10-09T18:15:30Z", d.toISOString()); d = new TbDate(s, pattern, Locale.US, "America/New_York"); - Assert.assertEquals("2022-10-10T01:15:30Z", d.toISOString()); + Assert.assertEquals("2022-10-09T18:15:30Z", d.toISOString()); // tz = "+02:00" /** * For Java 11: @@ -173,10 +183,13 @@ class TbDateTest { d = new TbDate(s, pattern, Locale.GERMAN, ZoneId.of("Europe/Berlin")); Assert.assertEquals("2022-10-09T19:15:30Z", d.toISOString()); - s = "09:15:30 пп, середа, 4 жовтня 2023 р."; + s = "02:15:30 пп, середа, 4 жовтня 2023 р."; pattern = "hh:mm:ss a, EEEE, d MMMM y 'р.'"; d = new TbDate(s, pattern, Locale.forLanguageTag("uk-UA")); - Assert.assertEquals("2023-10-04T21:15:30Z", d.toISOString()); + localOffsetHrs = ZoneId.systemDefault().getRules().getOffset(d.getInstant()).getTotalSeconds()/60/60; + hrs = 14 - localOffsetHrs; + expected = "2023-10-04T" + hrs + ":15:30Z"; + Assert.assertEquals(expected, d.toISOString()); d = new TbDate(1693962245000L); Assert.assertEquals("2023-09-06T01:04:05Z", d.toISOString());