diff --git a/javakdb/src/main/java/com/kx/c.java b/javakdb/src/main/java/com/kx/c.java index 93f078a..2bfe5c6 100644 --- a/javakdb/src/main/java/com/kx/c.java +++ b/javakdb/src/main/java/com/kx/c.java @@ -39,8 +39,10 @@ import java.time.Instant; import java.time.ZoneOffset; import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.Arrays; import java.util.Calendar; +import java.util.Locale; import java.util.TimeZone; import java.util.UUID; import javax.net.ssl.SSLSocket; @@ -2033,7 +2035,7 @@ public static Flip td(Object tbl) throws UnsupportedEncodingException{ * @return String representation of int with zero padding */ static String i2(int i){ - return new DecimalFormat("00").format(i); + return new DecimalFormat("00",DecimalFormatSymbols.getInstance(Locale.ROOT)).format(i); } /** * Creates a string from int with left padding of 0s, if less than 9 digits @@ -2041,6 +2043,6 @@ static String i2(int i){ * @return String representation of int with zero padding */ static String i9(int i){ - return new DecimalFormat("000000000").format(i); + return new DecimalFormat("000000000",DecimalFormatSymbols.getInstance(Locale.ROOT)).format(i); } } diff --git a/javakdb/src/test/java/com/kx/CTest.java b/javakdb/src/test/java/com/kx/CTest.java index 330ce2b..4d505e7 100644 --- a/javakdb/src/test/java/com/kx/CTest.java +++ b/javakdb/src/test/java/com/kx/CTest.java @@ -1105,6 +1105,23 @@ public void testTimespanToString() Assert.assertEquals("", mon.toString()); } + @Test + public void testTemporalToStringLocaleIndependent() + { + // The canonical kdb+ textual form of temporal types must always use ASCII digits, + // independent of the JVM default locale (e.g. Arabic-Indic digit locales). + java.util.Locale previous = java.util.Locale.getDefault(); + try { + java.util.Locale.setDefault(java.util.Locale.forLanguageTag("ar-EG")); + Assert.assertEquals("2001-11", new c.Month(22).toString()); + Assert.assertEquals("00:22", new c.Minute(22).toString()); + Assert.assertEquals("00:00:22", new c.Second(22).toString()); + Assert.assertEquals("00:00:00.000000022", new c.Timespan(22).toString()); + } finally { + java.util.Locale.setDefault(previous); + } + } + @Test public void testTimespanEquals() {