diff --git a/src/main/java/caosdb/server/CaosDBServer.java b/src/main/java/caosdb/server/CaosDBServer.java index e8d9fb31761f86a17cde393aa03f614900941e02..6e502975fd2326e43bc46cd61021c0a8ca5726f7 100644 --- a/src/main/java/caosdb/server/CaosDBServer.java +++ b/src/main/java/caosdb/server/CaosDBServer.java @@ -64,11 +64,14 @@ import caosdb.server.utils.FileUtils; import caosdb.server.utils.Initialization; import caosdb.server.utils.NullPrintStream; import caosdb.server.utils.Utils; -import com.ibm.icu.util.TimeZone; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; import java.util.ArrayList; import java.util.Arrays; import java.util.Properties; +import java.util.TimeZone; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogRecord; @@ -134,8 +137,22 @@ public class CaosDBServer extends Application { public static void initTimeZone() throws InterruptedException, IOException { String serverProperty = getServerProperty(ServerProperties.KEY_TIMEZONE); if (serverProperty != null && !serverProperty.isEmpty()) { - logger.info("SET TIMEZONE = " + serverProperty + " from ServerProperty `" + ServerProperties.KEY_TIMEZONE + "`."); + logger.info( + "SET TIMEZONE = " + + serverProperty + + " from ServerProperty `" + + ServerProperties.KEY_TIMEZONE + + "`."); TimeZone.setDefault(TimeZone.getTimeZone(serverProperty)); + logger.info("TIMEZONE = " + TimeZone.getDefault()); + return; + } + + String fromDate = getTimeZoneFromDate(); + if (fromDate != null && fromDate.isEmpty()) { + logger.info("SET TIMEZONE = " + fromDate + " from `date +%Z`."); + TimeZone.setDefault(TimeZone.getTimeZone(fromDate)); + logger.info("TIMEZONE = " + TimeZone.getDefault()); return; } @@ -143,6 +160,7 @@ public class CaosDBServer extends Application { if (prop != null && !prop.isEmpty()) { logger.info("SET TIMEZONE = " + prop + " from JVM property `user.timezone`."); TimeZone.setDefault(TimeZone.getTimeZone(prop)); + logger.info("TIMEZONE = " + TimeZone.getDefault()); return; } @@ -150,13 +168,7 @@ public class CaosDBServer extends Application { if (envVar != null && !envVar.isEmpty()) { logger.info("SET TIMEZONE = " + envVar + " from evironment variable `TZ`."); TimeZone.setDefault(TimeZone.getTimeZone(envVar)); - return; - } - - String fromDate = getTimeZoneFromDate(); - if (fromDate != null && fromDate.isEmpty()) { - logger.info("SET TIMEZONE = " + fromDate + " from `date +%Z`."); - TimeZone.setDefault(TimeZone.getTimeZone(fromDate)); + logger.info("TIMEZONE = " + TimeZone.getDefault()); return; } @@ -164,15 +176,28 @@ public class CaosDBServer extends Application { } private static String getTimeZoneFromDate() throws InterruptedException, IOException { + final StringBuffer outputStringBuffer = new StringBuffer(); final Process cmd = Runtime.getRuntime().exec(new String[] {"date", "+%Z"}); + final int status = cmd.waitFor(); + + if (status != 0) { + logger.warning( + "Could not determine time zone from `date +%Z`. The command returned with exit code " + + cmd.exitValue()); + return null; + } + final Reader r = new InputStreamReader(cmd.getInputStream()); + final BufferedReader buf = new BufferedReader(r); + String line; + while ((line = buf.readLine()) != null) { + outputStringBuffer.append(line); + } - if (cmd.waitFor() == 0) { - return Utils.InputStream2String(cmd.getInputStream()); + if (outputStringBuffer.length() > 0) { + return outputStringBuffer.toString().trim(); + } else { + throw new RuntimeException("Output of `date +%Z` command was empty."); } - logger.warning( - "Could not determine time zone from `date +%Z`. The command returned with exit code " - + cmd.exitValue()); - return null; } /**