Use timezone if available when parsing time/date fields #21
This commit is contained in:
@@ -31,13 +31,8 @@ import com.solab.iso8583.IsoValue;
|
||||
*
|
||||
* @author Enrique Zamudio
|
||||
*/
|
||||
public class Date10ParseInfo extends FieldParseInfo {
|
||||
public class Date10ParseInfo extends DateTimeParseInfo {
|
||||
|
||||
private static final long FUTURE_TOLERANCE;
|
||||
|
||||
static {
|
||||
FUTURE_TOLERANCE = Long.parseLong(System.getProperty("j8583.future.tolerance", "900000"));
|
||||
}
|
||||
public Date10ParseInfo() {
|
||||
super(IsoType.DATE10, 10);
|
||||
}
|
||||
@@ -72,6 +67,9 @@ public class Date10ParseInfo extends FieldParseInfo {
|
||||
cal.set(Calendar.SECOND, ((buf[pos + 8] - 48) * 10) + buf[pos + 9] - 48);
|
||||
}
|
||||
cal.set(Calendar.MILLISECOND,0);
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
adjustWithFutureTolerance(cal);
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
}
|
||||
@@ -103,17 +101,11 @@ public class Date10ParseInfo extends FieldParseInfo {
|
||||
cal.set(Calendar.MINUTE, tens[3]);
|
||||
cal.set(Calendar.SECOND, tens[4]);
|
||||
cal.set(Calendar.MILLISECOND,0);
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
adjustWithFutureTolerance(cal);
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
}
|
||||
|
||||
public static void adjustWithFutureTolerance(Calendar cal) {
|
||||
//We need to handle a small tolerance into the future (a couple of minutes)
|
||||
long now = System.currentTimeMillis();
|
||||
long then = cal.getTimeInMillis();
|
||||
if (then > now && then-now > FUTURE_TOLERANCE) {
|
||||
cal.add(Calendar.YEAR, -1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.solab.iso8583.IsoValue;
|
||||
*
|
||||
* @author Enrique Zamudio
|
||||
*/
|
||||
public class Date4ParseInfo extends FieldParseInfo {
|
||||
public class Date4ParseInfo extends DateTimeParseInfo {
|
||||
|
||||
public Date4ParseInfo() {
|
||||
super(IsoType.DATE4, 4);
|
||||
@@ -61,6 +61,9 @@ public class Date4ParseInfo extends FieldParseInfo {
|
||||
} else {
|
||||
cal.set(Calendar.MONTH, ((buf[pos] - 48) * 10) + buf[pos + 1] - 49);
|
||||
cal.set(Calendar.DATE, ((buf[pos + 2] - 48) * 10) + buf[pos + 3] - 48);
|
||||
}
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
Date10ParseInfo.adjustWithFutureTolerance(cal);
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
@@ -87,7 +90,10 @@ public class Date4ParseInfo extends FieldParseInfo {
|
||||
cal.set(Calendar.MONTH, tens[0] - 1);
|
||||
cal.set(Calendar.DATE, tens[1]);
|
||||
cal.set(Calendar.MILLISECOND,0);
|
||||
Date10ParseInfo.adjustWithFutureTolerance(cal);
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
DateTimeParseInfo.adjustWithFutureTolerance(cal);
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.solab.iso8583.IsoValue;
|
||||
*
|
||||
* @author Enrique Zamudio
|
||||
*/
|
||||
public class DateExpParseInfo extends FieldParseInfo {
|
||||
public class DateExpParseInfo extends DateTimeParseInfo {
|
||||
|
||||
public DateExpParseInfo() {
|
||||
super(IsoType.DATE_EXP, 4);
|
||||
@@ -63,6 +63,9 @@ public class DateExpParseInfo extends FieldParseInfo {
|
||||
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR) - (cal.get(Calendar.YEAR) % 100)
|
||||
+ ((buf[pos] - 48) * 10) + buf[pos + 1] - 48);
|
||||
cal.set(Calendar.MONTH, ((buf[pos + 2] - 48) * 10) + buf[pos + 3] - 49);
|
||||
}
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
}
|
||||
@@ -93,6 +96,9 @@ public class DateExpParseInfo extends FieldParseInfo {
|
||||
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)
|
||||
- (cal.get(Calendar.YEAR) % 100) + tens[0]);
|
||||
cal.set(Calendar.MONTH, tens[1] - 1);
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.solab.iso8583.IsoValue;
|
||||
*
|
||||
* @author Enrique Zamudio
|
||||
*/
|
||||
public class TimeParseInfo extends FieldParseInfo {
|
||||
public class TimeParseInfo extends DateTimeParseInfo {
|
||||
|
||||
|
||||
public TimeParseInfo() {
|
||||
@@ -58,6 +58,9 @@ public class TimeParseInfo extends FieldParseInfo {
|
||||
cal.set(Calendar.HOUR_OF_DAY, ((buf[pos] - 48) * 10) + buf[pos + 1] - 48);
|
||||
cal.set(Calendar.MINUTE, ((buf[pos + 2] - 48) * 10) + buf[pos + 3] - 48);
|
||||
cal.set(Calendar.SECOND, ((buf[pos + 4] - 48) * 10) + buf[pos + 5] - 48);
|
||||
}
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
}
|
||||
@@ -82,6 +85,9 @@ public class TimeParseInfo extends FieldParseInfo {
|
||||
cal.set(Calendar.HOUR_OF_DAY, tens[0]);
|
||||
cal.set(Calendar.MINUTE, tens[1]);
|
||||
cal.set(Calendar.SECOND, tens[2]);
|
||||
if (tz != null) {
|
||||
cal.setTimeZone(tz);
|
||||
}
|
||||
return new IsoValue<Date>(type, cal.getTime(), null);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user