From c754e47e52a5f98160f110f79fa5f4372df60e70 Mon Sep 17 00:00:00 2001 From: Ben Fortuna Date: Tue, 14 Jan 2020 12:35:32 +1100 Subject: [PATCH] Support for UTC as default timezone for DateTime instances --- src/main/java/net/fortuna/ical4j/model/DateTime.java | 10 ++++------ src/main/java/net/fortuna/ical4j/util/TimeZones.java | 9 ++++++++- src/test/resources/ical4j.properties | 1 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/fortuna/ical4j/model/DateTime.java b/src/main/java/net/fortuna/ical4j/model/DateTime.java index 09586105d..9fcdbd354 100644 --- a/src/main/java/net/fortuna/ical4j/model/DateTime.java +++ b/src/main/java/net/fortuna/ical4j/model/DateTime.java @@ -301,7 +301,7 @@ public DateTime(final String value) throws ParseException { /** * Creates a new date-time instance from the specified value in the given * timezone. If a timezone is not specified, the default timezone (as - * returned by {@link java.util.TimeZone#getDefault()}) is used. + * returned by {@link TimeZones#getDefault()}) is used. * * @param value * a string representation of a date-time @@ -313,8 +313,7 @@ public DateTime(final String value) throws ParseException { public DateTime(final String value, final TimeZone timezone) throws ParseException { // setting the time to 0 since we are going to reset it anyway - super(0, Dates.PRECISION_SECOND, timezone != null ? timezone - : java.util.TimeZone.getDefault()); + super(0, Dates.PRECISION_SECOND, timezone != null ? timezone : TimeZones.getDefault()); this.time = new Time(getTime(), getFormat().getTimeZone()); try { @@ -368,8 +367,7 @@ public DateTime(final String value, final TimeZone timezone) public DateTime(String value, String pattern, TimeZone timezone) throws ParseException { // setting the time to 0 since we are going to reset it anyway - super(0, Dates.PRECISION_SECOND, timezone != null ? timezone - : java.util.TimeZone.getDefault()); + super(0, Dates.PRECISION_SECOND, timezone != null ? timezone : TimeZones.getDefault()); this.time = new Time(getTime(), getFormat().getTimeZone()); final DateFormat format = CalendarDateFormatFactory @@ -483,7 +481,7 @@ public final void setTimeZone(final TimeZone timezone) { private void resetTimeZone() { // use GMT timezone to avoid daylight savings rules affecting floating // time values.. - getFormat().setTimeZone(TimeZone.getDefault()); + getFormat().setTimeZone(TimeZones.getDefault()); // getFormat().setTimeZone(TimeZone.getTimeZone(TimeZones.GMT_ID)); } diff --git a/src/main/java/net/fortuna/ical4j/util/TimeZones.java b/src/main/java/net/fortuna/ical4j/util/TimeZones.java index 2de3bc7fb..ee008a92d 100644 --- a/src/main/java/net/fortuna/ical4j/util/TimeZones.java +++ b/src/main/java/net/fortuna/ical4j/util/TimeZones.java @@ -80,7 +80,14 @@ public static boolean isUtc(final TimeZone timezone) { return UTC_ID.equals(timezone.getID()) || IBM_UTC_ID.equals(timezone.getID()); } - + + public static TimeZone getDefault() { + if ("true".equals(Configurator.getProperty("net.fortuna.ical4j.timezone.utcDefault").orElse("false"))) { + return getUtcTimeZone(); + } + return TimeZone.getDefault(); + } + /** * Although timezones are not really applicable to DATE instances in iCalendar, the implementation * in iCal4j requires the use of a timezone. Dates in iCal4j may be either "floating", in that they diff --git a/src/test/resources/ical4j.properties b/src/test/resources/ical4j.properties index f6936f7f0..7901f4104 100644 --- a/src/test/resources/ical4j.properties +++ b/src/test/resources/ical4j.properties @@ -45,6 +45,7 @@ net.fortuna.ical4j.timezone.update.enabled=false #net.fortuna.ical4j.timezone.cache.impl=net.fortuna.ical4j.util.MapTimeZoneCache #net.fortuna.ical4j.timezone.date.floating={true|false} +#net.fortuna.ical4j.timezone.utcDefault={true|false} #net.fortuna.ical4j.factory.decoder=net.fortuna.ical4j.util.DefaultDecoderFactory