From e7306681eb7fc9c6e04b2519aead789ad0e98f53 Mon Sep 17 00:00:00 2001 From: Enrique Zamudio Date: Mon, 16 Apr 2018 19:50:57 -0500 Subject: [PATCH] default timezone to fix #107 --- src/main/java/com/solab/iso8583/MessageFactory.java | 3 +++ .../java/com/solab/iso8583/parse/Date10ParseInfo.java | 2 ++ .../java/com/solab/iso8583/parse/Date12ParseInfo.java | 2 ++ .../java/com/solab/iso8583/parse/Date14ParseInfo.java | 2 ++ src/main/java/com/solab/iso8583/parse/Date4ParseInfo.java | 2 ++ .../java/com/solab/iso8583/parse/DateExpParseInfo.java | 2 ++ .../java/com/solab/iso8583/parse/DateTimeParseInfo.java | 8 ++++++++ src/main/java/com/solab/iso8583/parse/TimeParseInfo.java | 4 +++- 8 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/solab/iso8583/MessageFactory.java b/src/main/java/com/solab/iso8583/MessageFactory.java index e5fa0c2..24f3122 100644 --- a/src/main/java/com/solab/iso8583/MessageFactory.java +++ b/src/main/java/com/solab/iso8583/MessageFactory.java @@ -280,6 +280,9 @@ public class MessageFactory { /** Sets the timezone for the specified FieldParseInfo, if it's needed for parsing dates. */ public void setTimezoneForParseGuide(int messageType, int field, TimeZone tz) { + if (field == 0) { + DateTimeParseInfo.setDefaultTimeZone(tz); + } Map guide = parseMap.get(messageType); if (guide != null) { FieldParseInfo fpi = guide.get(field); diff --git a/src/main/java/com/solab/iso8583/parse/Date10ParseInfo.java b/src/main/java/com/solab/iso8583/parse/Date10ParseInfo.java index 7526dd2..8add9ab 100644 --- a/src/main/java/com/solab/iso8583/parse/Date10ParseInfo.java +++ b/src/main/java/com/solab/iso8583/parse/Date10ParseInfo.java @@ -69,6 +69,8 @@ public class Date10ParseInfo extends DateTimeParseInfo { cal.set(Calendar.MILLISECOND,0); if (tz != null) { cal.setTimeZone(tz); + } else if (getDefaultTimeZone() != null) { + cal.setTimeZone(getDefaultTimeZone()); } adjustWithFutureTolerance(cal); return new IsoValue<>(type, cal.getTime(), null); diff --git a/src/main/java/com/solab/iso8583/parse/Date12ParseInfo.java b/src/main/java/com/solab/iso8583/parse/Date12ParseInfo.java index eaf187d..0a98e15 100644 --- a/src/main/java/com/solab/iso8583/parse/Date12ParseInfo.java +++ b/src/main/java/com/solab/iso8583/parse/Date12ParseInfo.java @@ -61,6 +61,8 @@ public class Date12ParseInfo extends DateTimeParseInfo { cal.set(Calendar.MILLISECOND,0); if (tz != null) { cal.setTimeZone(tz); + } else if (getDefaultTimeZone() != null) { + cal.setTimeZone(getDefaultTimeZone()); } adjustWithFutureTolerance(cal); return new IsoValue<>(type, cal.getTime(), null); diff --git a/src/main/java/com/solab/iso8583/parse/Date14ParseInfo.java b/src/main/java/com/solab/iso8583/parse/Date14ParseInfo.java index be81fe1..fe8682b 100644 --- a/src/main/java/com/solab/iso8583/parse/Date14ParseInfo.java +++ b/src/main/java/com/solab/iso8583/parse/Date14ParseInfo.java @@ -55,6 +55,8 @@ public class Date14ParseInfo extends DateTimeParseInfo { cal.set(Calendar.MILLISECOND,0); if (tz != null) { cal.setTimeZone(tz); + } else if (getDefaultTimeZone() != null) { + cal.setTimeZone(getDefaultTimeZone()); } adjustWithFutureTolerance(cal); return new IsoValue<>(type, cal.getTime(), null); diff --git a/src/main/java/com/solab/iso8583/parse/Date4ParseInfo.java b/src/main/java/com/solab/iso8583/parse/Date4ParseInfo.java index b1227dd..b810f88 100644 --- a/src/main/java/com/solab/iso8583/parse/Date4ParseInfo.java +++ b/src/main/java/com/solab/iso8583/parse/Date4ParseInfo.java @@ -64,6 +64,8 @@ public class Date4ParseInfo extends DateTimeParseInfo { } if (tz != null) { cal.setTimeZone(tz); + } else if (getDefaultTimeZone() != null) { + cal.setTimeZone(getDefaultTimeZone()); } Date10ParseInfo.adjustWithFutureTolerance(cal); return new IsoValue<>(type, cal.getTime(), null); diff --git a/src/main/java/com/solab/iso8583/parse/DateExpParseInfo.java b/src/main/java/com/solab/iso8583/parse/DateExpParseInfo.java index 6300d42..39c8c1e 100644 --- a/src/main/java/com/solab/iso8583/parse/DateExpParseInfo.java +++ b/src/main/java/com/solab/iso8583/parse/DateExpParseInfo.java @@ -66,6 +66,8 @@ public class DateExpParseInfo extends DateTimeParseInfo { } if (tz != null) { cal.setTimeZone(tz); + } else if (getDefaultTimeZone() != null) { + cal.setTimeZone(getDefaultTimeZone()); } return new IsoValue<>(type, cal.getTime(), null); } diff --git a/src/main/java/com/solab/iso8583/parse/DateTimeParseInfo.java b/src/main/java/com/solab/iso8583/parse/DateTimeParseInfo.java index 89626b9..2897b35 100644 --- a/src/main/java/com/solab/iso8583/parse/DateTimeParseInfo.java +++ b/src/main/java/com/solab/iso8583/parse/DateTimeParseInfo.java @@ -15,11 +15,19 @@ public abstract class DateTimeParseInfo extends FieldParseInfo { protected static final long FUTURE_TOLERANCE; protected TimeZone tz; + private static TimeZone defaultTimezone; static { FUTURE_TOLERANCE = Long.parseLong(System.getProperty("j8583.future.tolerance", "900000")); } + public static void setDefaultTimeZone(TimeZone tz) { + defaultTimezone = tz; + } + public static TimeZone getDefaultTimeZone() { + return defaultTimezone; + } + protected DateTimeParseInfo(IsoType type, int length) { super(type, length); } diff --git a/src/main/java/com/solab/iso8583/parse/TimeParseInfo.java b/src/main/java/com/solab/iso8583/parse/TimeParseInfo.java index d48885b..a92f7d0 100644 --- a/src/main/java/com/solab/iso8583/parse/TimeParseInfo.java +++ b/src/main/java/com/solab/iso8583/parse/TimeParseInfo.java @@ -61,8 +61,10 @@ public class TimeParseInfo extends DateTimeParseInfo { } if (tz != null) { cal.setTimeZone(tz); + } else if (getDefaultTimeZone() != null) { + cal.setTimeZone(getDefaultTimeZone()); } - return new IsoValue(type, cal.getTime(), null); + return new IsoValue<>(type, cal.getTime(), null); } @Override