Ticket #13376: DateUtil.ZonedDateTime.patch

File DateUtil.ZonedDateTime.patch, 2.5 KB (added by simon04, 3 years ago)
  • src/org/openstreetmap/josm/tools/date/DateUtils.java

    diff --git a/src/org/openstreetmap/josm/tools/date/DateUtils.java b/src/org/openstreetmap/josm/tools/date/DateUtils.java
    index c8a3245..7f6c19e 100644
    a b  
    44import java.text.DateFormat;
    55import java.text.ParsePosition;
    66import java.text.SimpleDateFormat;
     7import java.time.ZoneId;
     8import java.time.ZoneOffset;
     9import java.time.ZonedDateTime;
     10import java.time.temporal.ChronoField;
    711import java.util.Calendar;
    812import java.util.Date;
    913import java.util.GregorianCalendar;
    public static synchronized long tsFromString(String str) { 
    96100                checkLayout(str, "xxxx-xx-xxTxx:xx:xx-xx") ||
    97101                checkLayout(str, "xxxx-xx-xxTxx:xx:xx+xx:00") ||
    98102                checkLayout(str, "xxxx-xx-xxTxx:xx:xx-xx:00")) {
    99             final Calendar c; // consider EXIF date in default timezone
    100             if (checkLayout(str, "xxxx:xx:xx xx:xx:xx")) {
    101                 c = getLocalCalendar();
    102             } else {
    103                 c = calendar;
    104             }
    105             c.set(
    106                 parsePart4(str, 0),
    107                 parsePart2(str, 5)-1,
    108                 parsePart2(str, 8),
    109                 parsePart2(str, 11),
    110                 parsePart2(str, 14),
    111                 parsePart2(str, 17));
    112             c.set(Calendar.MILLISECOND, 0);
    113 
     103            final ZonedDateTime local = ZonedDateTime.of(
     104                    parsePart4(str, 0),
     105                    parsePart2(str, 5),
     106                    parsePart2(str, 8),
     107                    parsePart2(str, 11),
     108                    parsePart2(str, 14),
     109                    parsePart2(str, 17),
     110                    0,
     111                    checkLayout(str, "xxxx:xx:xx xx:xx:xx") ? ZoneId.systemDefault() : ZoneOffset.UTC
     112            );
    114113            if (str.length() == 22 || str.length() == 25) {
    115114                int plusHr = parsePart2(str, 20);
    116115                int mul = str.charAt(19) == '+' ? -3600000 : 3600000;
    117                 return c.getTimeInMillis()+plusHr*mul;
     116                return local.with(ChronoField.MILLI_OF_SECOND, plusHr*mul).toInstant().toEpochMilli();
    118117            }
    119118
    120             return c.getTimeInMillis();
     119            return local.toInstant().toEpochMilli();
    121120        } else if (checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxxZ") ||
    122121                checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx") ||
    123122                checkLayout(str, "xxxx:xx:xx xx:xx:xx.xxx") ||