From 8eda9abab77d8d1f48a824e31793a6f9a946a01c Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 7 Sep 2019 11:00:29 +0000 Subject: [PATCH] Util: Fix time zone for formatted time/date --- core/java/src/net/i2p/data/DataHelper.java | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index 1aa87e7b27..482037dc0a 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -39,6 +39,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Properties; +import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Pattern; import java.util.zip.Deflater; @@ -114,10 +115,7 @@ public class DataHelper { */ private static final DateFormat DATE_FORMAT = DateFormat.getDateInstance(DateFormat.MEDIUM); private static final DateFormat TIME_FORMAT = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT); - static { - DATE_FORMAT.setTimeZone(SystemVersion.getSystemTimeZone()); - TIME_FORMAT.setTimeZone(SystemVersion.getSystemTimeZone()); - } + private static boolean _date_tz_set, _time_tz_set; /** Read a mapping from the stream, as defined by the I2P data structure spec, * and store it into a Properties object. @@ -526,7 +524,7 @@ public class DataHelper { fos = new SecureFileOutputStream(tmpFile); out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(fos, "UTF-8"))); out.println("# NOTE: This I2P config file must use UTF-8 encoding"); - out.println("# Last saved: " + new Date(System.currentTimeMillis())); + out.println("# Last saved: " + formatTime(System.currentTimeMillis())); for (Map.Entry entry : props.entrySet()) { String name = (String) entry.getKey(); String val = (String) entry.getValue(); @@ -1631,6 +1629,12 @@ public class DataHelper { */ public static String formatDate(long now) { synchronized(DATE_FORMAT) { + if (!_date_tz_set) { + // delayed set, too early if done in static block + TimeZone tz = SystemVersion.getSystemTimeZone(); + DATE_FORMAT.setTimeZone(tz); + _date_tz_set = true; + } return DATE_FORMAT.format(new Date(now)); } } @@ -1645,6 +1649,12 @@ public class DataHelper { */ public static String formatTime(long now) { synchronized(TIME_FORMAT) { + if (!_time_tz_set) { + // delayed set, too early if done in static block + TimeZone tz = SystemVersion.getSystemTimeZone(); + TIME_FORMAT.setTimeZone(tz); + _time_tz_set = true; + } return TIME_FORMAT.format(new Date(now)); } }