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 5ae3009ee0e6bb6435976580f374539ee6920113..754ea81487b0fd14b23e47e91b30b77e0acad5b7 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -31,6 +31,7 @@ import net.i2p.data.DataHelper; import net.i2p.data.Hash; import net.i2p.util.Log; import net.i2p.util.SecureFile; +import net.i2p.util.SystemVersion; import net.i2p.util.Translate; import org.klomp.snark.I2PSnarkUtil; @@ -2802,7 +2803,7 @@ public class I2PSnarkServlet extends BasicServlet { } long dat = meta.getCreationDate(); SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); + fmt.setTimeZone(SystemVersion.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 de9188d8e516c9caf393dbf8cdbe9fe779ec9513..26c46e431fd0e372b5c9c0e46de7ead8bd592ec7 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ConnThrottler.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/ConnThrottler.java @@ -8,12 +8,12 @@ import java.util.Iterator; import java.util.List; import java.util.Map; -import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; import net.i2p.data.Hash; import net.i2p.util.Clock; import net.i2p.util.Log; import net.i2p.util.SimpleTimer2; +import net.i2p.util.SystemVersion; /** * Count how often something happens with a particular peer and all peers. @@ -56,7 +56,7 @@ class ConnThrottler { _log = log; // for logging _fmt = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); - _fmt.setTimeZone(DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext())); + _fmt.setTimeZone(SystemVersion.getSystemTimeZone()); 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 35da6b38745075b692301c165a3bcca31f6a3902..44c2fcdc741e5cd98db8c108af9101fe39716cb4 100644 --- a/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java +++ b/apps/routerconsole/java/src/net/i2p/router/news/NewsManager.java @@ -19,6 +19,7 @@ import static net.i2p.app.ClientAppState.*; import net.i2p.data.DataHelper; import net.i2p.util.FileUtil; import net.i2p.util.Log; +import net.i2p.util.SystemVersion; import net.i2p.util.TranslateReader; import org.cybergarage.xml.Node; @@ -233,7 +234,7 @@ public class NewsManager implements ClientApp { // 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 - fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); + fmt.setTimeZone(SystemVersion.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 5c800bf038cd5a015feddeb8add938fac4415977..f57d6d7c0dd24c6927266c2886c889cf551e9e01 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/NewsFetcher.java @@ -43,6 +43,7 @@ import net.i2p.util.PortMapper; import net.i2p.util.ReusableGZIPInputStream; import net.i2p.util.SecureFileOutputStream; import net.i2p.util.SSLEepGet; +import net.i2p.util.SystemVersion; import net.i2p.util.Translate; import net.i2p.util.VersionComparator; @@ -589,7 +590,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 - fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); + fmt.setTimeZone(SystemVersion.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 01ac1614bbcb545f509d81f35ba22a3fd4720c86..9dd7892f2801fadcb57b7b1e4ecba18d8c4d93f2 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/EventLogHelper.java @@ -16,6 +16,7 @@ import java.util.TreeMap; import net.i2p.data.DataHelper; import net.i2p.router.util.EventLog; +import net.i2p.util.SystemVersion; /** * /events.jsp @@ -188,7 +189,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 - fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); + fmt.setTimeZone(SystemVersion.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 07dfa58546fe9967e6f3b612d9efaa5883842f99..5eaa3e3625ce662be63c37f1fd2226d9f8a8bbbb 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NewsFeedHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NewsFeedHelper.java @@ -10,6 +10,7 @@ import net.i2p.app.ClientAppManager; import net.i2p.data.DataHelper; import net.i2p.router.news.NewsEntry; import net.i2p.router.news.NewsManager; +import net.i2p.util.SystemVersion; /** @@ -55,7 +56,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 - fmt.setTimeZone(DataHelper.getSystemTimeZone(ctx)); + fmt.setTimeZone(SystemVersion.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 710ce2753ddd483e2fc53514f61087bf3d6b95af..07664b2ee4aedb135a154cff463f8540eb5af7f7 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryBarRenderer.java @@ -633,7 +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 - fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); + fmt.setTimeZone(SystemVersion.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 c7604a213fff50bcb6efa34dd5f440c7f5eb37e1..cc582d3c98bc78159cbd9e121c784563560317f3 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/FormatDate.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/FormatDate.java @@ -3,8 +3,7 @@ package i2p.susi.dns; import java.util.Date; import java.text.DateFormat; -import net.i2p.I2PAppContext; -import net.i2p.data.DataHelper; +import net.i2p.util.SystemVersion; /** * Format a date in local time zone @@ -17,7 +16,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 - fmt.setTimeZone(DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext())); + fmt.setTimeZone(SystemVersion.getSystemTimeZone()); _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 c184831c3419b74d3b8616b581cb20c977ee96a8..ed5c3aa145722149882b6f88ddd9b86f2b098b47 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/Mail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/Mail.java @@ -41,8 +41,8 @@ import java.util.Date; import java.util.Locale; import java.util.TimeZone; -import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; +import net.i2p.util.SystemVersion; /** * data structure to hold a single message, mostly used with folder view and sorting @@ -276,7 +276,7 @@ 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 - TimeZone tz = DataHelper.getSystemTimeZone(I2PAppContext.getGlobalContext()); + TimeZone tz = SystemVersion.getSystemTimeZone(); localDateFormatter.setTimeZone(tz); longLocalDateFormatter.setTimeZone(tz); DateFormat mailDateFormatter = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH ); diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index ee78a95c645498696ff7109e0ba1e5a2c8e92dae..f2c83a48e403557699852153f4564eb92bf4b096 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -37,7 +37,6 @@ 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; @@ -1925,20 +1924,4 @@ 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 94a39cf0ce34715dd6d8cd74a22f92133ed23226..a88fc1df9724032bc28283d1f8ab00c4863a944d 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -478,7 +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 - fmt.setTimeZone(DataHelper.getSystemTimeZone(_context)); + fmt.setTimeZone(SystemVersion.getSystemTimeZone(_context)); _dateFormatPattern = format; _dateFormat = fmt; return true; diff --git a/core/java/src/net/i2p/util/SystemVersion.java b/core/java/src/net/i2p/util/SystemVersion.java index 3e5e56e7c30acd07ca70d0e0811e5fb572b29564..47644f427806cf7701487a0ce93e748e41a178b9 100644 --- a/core/java/src/net/i2p/util/SystemVersion.java +++ b/core/java/src/net/i2p/util/SystemVersion.java @@ -5,6 +5,9 @@ package net.i2p.util; */ import java.lang.reflect.Field; +import java.util.TimeZone; + +import net.i2p.I2PAppContext; /** * Methods to find out what system we are running on @@ -202,4 +205,59 @@ public abstract class SystemVersion { maxMemory = 96*1024*1024l; return maxMemory; } + + /** + * 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() { + return getSystemTimeZone(I2PAppContext.getGlobalContext()); + } + + /** + * 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(); + } + + /** + * @since 0.9.24 + */ +/**** + public static void main(String[] args) { + System.out.println("64 bit : " + is64Bit()); + System.out.println("Java 6 : " + isJava6()); + System.out.println("Java 7 : " + isJava7()); + System.out.println("Java 8 : " + isJava8()); + System.out.println("Java 9 : " + isJava9()); + System.out.println("Android : " + isAndroid()); + if (isAndroid()) + System.out.println(" Version: " + getAndroidVersion()); + System.out.println("Apache : " + isApache()); + System.out.println("ARM : " + isARM()); + System.out.println("Mac : " + isMac()); + System.out.println("Gentoo : " + isGentoo()); + System.out.println("GNU : " + isGNU()); + System.out.println("Windows : " + isWindows()); + System.out.println("Wrapper : " + hasWrapper()); + System.out.println("x86 : " + isX86()); + System.out.println("Max mem : " + getMaxMemory()); + + } +****/ }