From 6fb0692d578fb554f8499cd02c5446cf559e96ab Mon Sep 17 00:00:00 2001 From: zzz <zzz@mail.i2p> Date: Mon, 16 Nov 2015 20:04:15 +0000 Subject: [PATCH] Centralize time zone code in DataHelper NewsManager should be a ClientApp, not a RouterApp --- .../org/klomp/snark/web/I2PSnarkServlet.java | 5 +---- .../src/net/i2p/i2ptunnel/ConnThrottler.java | 5 +---- .../src/net/i2p/router/news/NewsManager.java | 10 ++++------ .../src/net/i2p/router/update/NewsFetcher.java | 5 +---- .../src/net/i2p/router/web/EventLogHelper.java | 5 +---- .../src/net/i2p/router/web/NewsFeedHelper.java | 5 +---- .../net/i2p/router/web/SummaryBarRenderer.java | 5 +---- .../src/java/src/i2p/susi/dns/FormatDate.java | 6 ++---- .../susimail/src/src/i2p/susi/webmail/Mail.java | 9 +++------ core/java/src/net/i2p/data/DataHelper.java | 17 +++++++++++++++++ core/java/src/net/i2p/util/LogManager.java | 5 +---- 11 files changed, 33 insertions(+), 44 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 5da8e2f436..5389736602 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; -import java.util.TimeZone; import java.util.TreeMap; import javax.servlet.ServletConfig; @@ -2801,9 +2800,7 @@ public class I2PSnarkServlet extends BasicServlet { } long dat = meta.getCreationDate(); SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - String systemTimeZone = _context.getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); if (dat > 0) { String date = fmt.format(new Date(dat)); buf.append("<tr><td>"); diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ConnThrottler.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ConnThrottler.java index c802a99958..de9188d8e5 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ConnThrottler.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ConnThrottler.java @@ -7,7 +7,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.TimeZone; import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; @@ -57,9 +56,7 @@ class ConnThrottler { _log = log; // for logging _fmt = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); - String systemTimeZone = I2PAppContext.getGlobalContext().getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - _fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + _fmt.setTimeZone(DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext())); new Cleaner(); } diff --git a/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java b/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java index d85baadf58..35da6b3874 100644 --- a/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java +++ b/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java @@ -10,13 +10,13 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.List; -import java.util.TimeZone; import net.i2p.I2PAppContext; +import net.i2p.app.ClientApp; import net.i2p.app.ClientAppManager; import net.i2p.app.ClientAppState; import static net.i2p.app.ClientAppState.*; -import net.i2p.router.app.RouterApp; +import net.i2p.data.DataHelper; import net.i2p.util.FileUtil; import net.i2p.util.Log; import net.i2p.util.TranslateReader; @@ -30,7 +30,7 @@ import org.cybergarage.xml.Node; * * @since 0.9.23 */ -public class NewsManager implements RouterApp { +public class NewsManager implements ClientApp { private final I2PAppContext _context; private final Log _log; @@ -233,9 +233,7 @@ public class NewsManager implements RouterApp { // Doesn't work if the date has a : in it, but SHORT hopefully does not DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = _context.getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); try { Date date = fmt.parse(newsContent.substring(0, colon)); entry.updated = date.getTime(); diff --git a/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java b/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java index 66799737db..9b096a6b35 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java @@ -19,7 +19,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.StringTokenizer; -import java.util.TimeZone; import net.i2p.app.ClientAppManager; import net.i2p.crypto.SU3File; @@ -579,9 +578,7 @@ class NewsFetcher extends UpdateRunner { return; DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = _context.getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); for (NewsEntry e : entries) { if (e.title == null || e.content == null) continue; diff --git a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java index ca738304e7..01ac1614bb 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java @@ -12,7 +12,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.TimeZone; import java.util.TreeMap; import net.i2p.data.DataHelper; @@ -189,9 +188,7 @@ public class EventLogHelper extends FormHandler { SimpleDateFormat fmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = _context.getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); List<Map.Entry<Long, String>> entries = new ArrayList<Map.Entry<Long, String>>(events.entrySet()); Collections.reverse(entries); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NewsFeedHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/NewsFeedHelper.java index 357887f9e7..07dfa58546 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NewsFeedHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NewsFeedHelper.java @@ -4,7 +4,6 @@ import java.text.DateFormat; import java.util.Collections; import java.util.Date; import java.util.List; -import java.util.TimeZone; import net.i2p.I2PAppContext; import net.i2p.app.ClientAppManager; @@ -56,9 +55,7 @@ public class NewsFeedHelper extends HelperBase { if (!entries.isEmpty()) { DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = ctx.getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(ctx)); int i = 0; for (NewsEntry entry : entries) { if (i++ < start) diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java index 002f7983b0..710ce2753d 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java @@ -9,7 +9,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.TimeZone; import net.i2p.app.ClientAppManager; import net.i2p.crypto.SigType; @@ -634,9 +633,7 @@ public class SummaryBarRenderer { buf.append("<ul>\n"); DateFormat fmt = DateFormat.getDateInstance(DateFormat.SHORT); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = _context.getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); int i = 0; final int max = 2; for (NewsEntry entry : entries) { diff --git a/apps/susidns/src/java/src/i2p/susi/dns/FormatDate.java b/apps/susidns/src/java/src/i2p/susi/dns/FormatDate.java index ad576dfb04..c7604a213f 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/FormatDate.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/FormatDate.java @@ -2,9 +2,9 @@ package i2p.susi.dns; import java.util.Date; import java.text.DateFormat; -import java.util.TimeZone; import net.i2p.I2PAppContext; +import net.i2p.data.DataHelper; /** * Format a date in local time zone @@ -17,9 +17,7 @@ public abstract class FormatDate static { DateFormat fmt = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = I2PAppContext.getGlobalContext().getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext())); _dateFormat = fmt; } diff --git a/apps/susimail/src/src/i2p/susi/webmail/Mail.java b/apps/susimail/src/src/i2p/susi/webmail/Mail.java index e0386b223b..c184831c34 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java @@ -276,12 +276,9 @@ class Mail { DateFormat localDateFormatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); DateFormat longLocalDateFormatter = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = I2PAppContext.getGlobalContext().getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) { - TimeZone tz = TimeZone.getTimeZone(systemTimeZone); - localDateFormatter.setTimeZone(tz); - longLocalDateFormatter.setTimeZone(tz); - } + TimeZone tz = DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext()); + localDateFormatter.setTimeZone(tz); + longLocalDateFormatter.setTimeZone(tz); DateFormat mailDateFormatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH ); error = ""; diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index f2c83a48e4..ee78a95c64 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -37,6 +37,7 @@ import java.util.Iterator; 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; @@ -1924,4 +1925,20 @@ public class DataHelper { } return p.split(s, limit); } + + /** + * The system's time zone, which is probably different from the + * JVM time zone, because Router changes the JVM default to GMT. + * It saves the old default in the context properties where we can get it. + * Use this to format a time in local time zone with DateFormat.setTimeZone(). + * + * @return non-null + * @since 0.9.24 + */ + public static TimeZone getSystemTimeZone(I2PAppContext ctx) { + String systemTimeZone = ctx.getProperty("i2p.systemTimeZone"); + if (systemTimeZone != null) + return TimeZone.getTimeZone(systemTimeZone); + return TimeZone.getDefault(); + } } diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index ca2476de83..94a39cf0ce 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -22,7 +22,6 @@ import java.util.Map; import java.util.Properties; import java.util.Queue; import java.util.Set; -import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicInteger; @@ -479,9 +478,7 @@ public class LogManager implements Flushable { if (!format.equals("")) fmt.applyPattern(format); // the router sets the JVM time zone to UTC but saves the original here so we can get it - String systemTimeZone = _context.getProperty("i2p.systemTimeZone"); - if (systemTimeZone != null) - fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); + fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); _dateFormatPattern = format; _dateFormat = fmt; return true; -- GitLab