Ticket #11649: dateutils.patch

File dateutils.patch, 3.2 KB (added by shinigami, 9 years ago)

patch

  • src/org/openstreetmap/josm/tools/date/DateUtils.java

    ### Eclipse Workspace Patch 1.0
    #P JOSM
     
    7272                checkLayout(str, "xxxx-xx-xxTxx:xx:xx+xx:00") ||
    7373                checkLayout(str, "xxxx-xx-xxTxx:xx:xx-xx:00")) {
    7474            calendar.set(
    75                 parsePart(str, 0, 4),
    76                 parsePart(str, 5, 2)-1,
    77                 parsePart(str, 8, 2),
    78                 parsePart(str, 11, 2),
    79                 parsePart(str, 14, 2),
    80                 parsePart(str, 17, 2));
     75                parsePart4(str, 0),
     76                parsePart2(str, 5)-1,
     77                parsePart2(str, 8),
     78                parsePart2(str, 11),
     79                parsePart2(str, 14),
     80                parsePart2(str, 17));
    8181
    8282            if (str.length() == 25) {
    83                 int plusHr = parsePart(str, 20, 2);
     83                int plusHr = parsePart2(str, 20);
    8484                int mul = str.charAt(19) == '+' ? -3600000 : 3600000;
    8585                calendar.setTimeInMillis(calendar.getTimeInMillis()+plusHr*mul);
    8686            }
     
    9191                checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx+xx:00") ||
    9292                checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx-xx:00")) {
    9393            calendar.set(
    94                 parsePart(str, 0, 4),
    95                 parsePart(str, 5, 2)-1,
    96                 parsePart(str, 8, 2),
    97                 parsePart(str, 11, 2),
    98                 parsePart(str, 14, 2),
    99                 parsePart(str, 17, 2));
    100             long millis = parsePart(str, 20, 3);
     94                parsePart4(str, 0),
     95                parsePart2(str, 5)-1,
     96                parsePart2(str, 8),
     97                parsePart2(str, 11),
     98                parsePart2(str, 14),
     99                parsePart2(str, 17));
     100            long millis = parsePart3(str, 20);
    101101            if (str.length() == 29)
    102                 millis += parsePart(str, 24, 2) * (str.charAt(23) == '+' ? -3600000 : 3600000);
     102                millis += parsePart2(str, 24) * (str.charAt(23) == '+' ? -3600000 : 3600000);
    103103            calendar.setTimeInMillis(calendar.getTimeInMillis()+millis);
    104104
    105105            return calendar.getTime();
     
    141141        return true;
    142142    }
    143143
    144     private static int parsePart(String str, int off, int len) {
    145         return Integer.parseInt(str.substring(off, off+len));
     144    private static int parsePart2(String str, int off) {
     145        return 10 * (str.charAt(off) - '0') + (str.charAt(off + 1) - '0');
    146146    }
    147147
     148    private static int parsePart3(String str, int off) {
     149        return 100 * (str.charAt(off) - '0') + 10 * (str.charAt(off + 1) - '0') + (str.charAt(off + 2) - '0');
     150    }
     151
     152    private static int parsePart4(String str, int off) {
     153        return 1000 * (str.charAt(off) - '0') + 100 * (str.charAt(off + 1) - '0')  + 10 * (str.charAt(off + 2) - '0') + (str.charAt(off + 3) - '0');
     154    }
     155
    148156    /**
    149157     * Returns a new {@code SimpleDateFormat} for date only, according to <a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601</a>.
    150158     * @return a new ISO 8601 date format, for date only.