// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.fasterxml.jackson.databind.util; import java.text.ParseException; import java.text.ParsePosition; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import java.util.TimeZone; public class ISO8601Utils { private static final String GMT_ID = "GMT"; private static final TimeZone TIMEZONE_GMT; private static final TimeZone TIMEZONE_Z; public ISO8601Utils() { } private static boolean checkOffset(String s, int i, char c) { return i < s.length() && s.charAt(i) == c; } public static String format(Date date) { return format(date, false, TIMEZONE_GMT); } public static String format(Date date, boolean flag) { return format(date, flag, TIMEZONE_GMT); } public static String format(Date date, boolean flag, TimeZone timezone) { GregorianCalendar gregoriancalendar = new GregorianCalendar(timezone, Locale.US); gregoriancalendar.setTime(date); int k = "yyyy-MM-ddThh:mm:ss".length(); int i; int j; if (flag) { i = ".sss".length(); } else { i = 0; } if (timezone.getRawOffset() == 0) { j = "Z".length(); } else { j = "+hh:mm".length(); } date = new StringBuilder(k + i + j); padInt(date, gregoriancalendar.get(1), "yyyy".length()); date.append('-'); padInt(date, gregoriancalendar.get(2) + 1, "MM".length()); date.append('-'); padInt(date, gregoriancalendar.get(5), "dd".length()); date.append('T'); padInt(date, gregoriancalendar.get(11), "hh".length()); date.append(':'); padInt(date, gregoriancalendar.get(12), "mm".length()); date.append(':'); padInt(date, gregoriancalendar.get(13), "ss".length()); if (flag) { date.append('.'); padInt(date, gregoriancalendar.get(14), "sss".length()); } i = timezone.getOffset(gregoriancalendar.getTimeInMillis()); if (i != 0) { j = Math.abs(i / 60000 / 60); int l = Math.abs((i / 60000) % 60); char c; if (i < 0) { c = '-'; } else { c = '+'; } date.append(c); padInt(date, j, "hh".length()); date.append(':'); padInt(date, l, "mm".length()); } else { date.append('Z'); } return date.toString(); } private static void padInt(StringBuilder stringbuilder, int i, int j) { String s = Integer.toString(i); for (i = j - s.length(); i > 0; i--) { stringbuilder.append('0'); } stringbuilder.append(s); } public static Date parse(String s, ParsePosition parseposition) throws ParseException { int i = parseposition.getIndex(); int k = i + 4; int l2 = parseInt(s, i, k); i = k; if (checkOffset(s, k, '-')) { i = k + 1; } k = i + 2; int i3 = parseInt(s, i, k); char c; Object obj1; Object obj; Object obj2; String s1; String s2; int j; int l; int i1; int j1; int k1; int l1; int i2; int j2; int k2; int j3; boolean flag; if (checkOffset(s, k, '-')) { j = k + 1; } else { j = k; } l1 = j + 2; j3 = parseInt(s, j, l1); k = 0; i1 = 0; i2 = 0; k1 = 0; flag = checkOffset(s, l1, 'T'); if (flag) { break MISSING_BLOCK_LABEL_155; } if (s.length() <= l1) { obj = new GregorianCalendar(l2, i3 - 1, j3); parseposition.setIndex(l1); return ((Calendar) (obj)).getTime(); } l = k1; j = l1; j1 = i2; if (!flag) goto _L2; else goto _L1 _L1: j = l1 + 1; k = j + 2; l1 = parseInt(s, j, k); j = k; if (checkOffset(s, k, ':')) { j = k + 1; } k = j + 2; j2 = parseInt(s, j, k); if (checkOffset(s, k, ':')) { j = k + 1; } else { j = k; } if (s.length() <= j) goto _L4; else goto _L3 _L3: k = s.charAt(j); if (k == 90 || k == 43 || k == 45) goto _L4; else goto _L5 _L5: k2 = j + 2; i2 = parseInt(s, j, k2); k = l1; l = k1; i1 = j2; j = k2; j1 = i2; if (!checkOffset(s, k2, '.')) goto _L2; else goto _L6 _L6: k = k2 + 1; j = k + 3; l = parseInt(s, k, j); j1 = i2; i1 = j2; k = l1; _L2: if (s.length() <= j) { throw new IllegalArgumentException("No time zone indicator"); } goto _L7 obj1; _L15: label0: { if (s == null) { s = null; } else { s = (new StringBuilder()).append('"').append(s).append("'").toString(); } s1 = ((Exception) (obj1)).getMessage(); if (s1 != null) { obj2 = s1; if (!s1.isEmpty()) { break label0; } } obj2 = (new StringBuilder()).append("(").append(obj1.getClass().getName()).append(")").toString(); } s = new ParseException((new StringBuilder()).append("Failed to parse date [").append(s).append("]: ").append(((String) (obj2))).toString(), parseposition.getIndex()); s.initCause(((Throwable) (obj1))); throw s; _L7: c = s.charAt(j); if (c != 'Z') goto _L9; else goto _L8 _L8: obj1 = TIMEZONE_Z; j++; _L12: obj1 = new GregorianCalendar(((TimeZone) (obj1))); ((Calendar) (obj1)).setLenient(false); ((Calendar) (obj1)).set(1, l2); ((Calendar) (obj1)).set(2, i3 - 1); ((Calendar) (obj1)).set(5, j3); ((Calendar) (obj1)).set(11, k); ((Calendar) (obj1)).set(12, i1); ((Calendar) (obj1)).set(13, j1); ((Calendar) (obj1)).set(14, l); parseposition.setIndex(j); return ((Calendar) (obj1)).getTime(); _L16: obj1 = s.substring(j); k1 = j + ((String) (obj1)).length(); if (!"+0000".equals(obj1) && !"+00:00".equals(obj1)) goto _L11; else goto _L10 _L10: obj1 = TIMEZONE_Z; j = k1; goto _L12 _L11: s1 = (new StringBuilder()).append("GMT").append(((String) (obj1))).toString(); obj2 = TimeZone.getTimeZone(s1); s2 = ((TimeZone) (obj2)).getID(); j = k1; obj1 = obj2; if (s2.equals(s1)) goto _L12; else goto _L13 _L13: j = k1; obj1 = obj2; if (s2.replace(":", "").equals(s1)) goto _L12; else goto _L14 _L14: throw new IndexOutOfBoundsException((new StringBuilder()).append("Mismatching time zone indicator: ").append(s1).append(" given, resolves to ").append(((TimeZone) (obj2)).getID()).toString()); _L17: throw new IndexOutOfBoundsException((new StringBuilder()).append("Invalid time zone indicator '").append(c).append("'").toString()); obj1; goto _L15 _L4: k = l1; l = k1; i1 = j2; j1 = i2; goto _L2 _L9: if (c != '+' && c != '-') goto _L17; else goto _L16 obj1; goto _L15 } private static int parseInt(String s, int i, int j) throws NumberFormatException { if (i < 0 || j > s.length() || i > j) { throw new NumberFormatException(s); } int k = 0; if (i < j) { int l = i + 1; i = Character.digit(s.charAt(i), 10); if (i < 0) { throw new NumberFormatException((new StringBuilder()).append("Invalid number: ").append(s).toString()); } k = -i; i = l; } for (; i < j; i++) { int i1 = Character.digit(s.charAt(i), 10); if (i1 < 0) { throw new NumberFormatException((new StringBuilder()).append("Invalid number: ").append(s).toString()); } k = k * 10 - i1; } return -k; } public static TimeZone timeZoneGMT() { return TIMEZONE_GMT; } static { TIMEZONE_GMT = TimeZone.getTimeZone("GMT"); TIMEZONE_Z = TIMEZONE_GMT; } }