Index: trunk/src/org/openstreetmap/josm/tools/date/DateUtils.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/date/DateUtils.java	(revision 10512)
+++ trunk/src/org/openstreetmap/josm/tools/date/DateUtils.java	(revision 10513)
@@ -35,8 +35,4 @@
     public static final TimeZone UTC = TimeZone.getTimeZone("UTC");
 
-    protected DateUtils() {
-        // Hide default constructor for utils classes
-    }
-
     /**
      * Property to enable display of ISO dates globally.
@@ -52,4 +48,7 @@
      */
     private static final GregorianCalendar calendar = new GregorianCalendar(UTC);
+    /**
+     * A shared instance to convert local times. The time zone should be set before every conversion.
+     */
     private static final GregorianCalendar calendarLocale = new GregorianCalendar(TimeZone.getDefault());
     private static final DatatypeFactory XML_DATE;
@@ -68,4 +67,8 @@
     }
 
+    protected DateUtils() {
+        // Hide default constructor for utils classes
+    }
+
     /**
      * Parses XML date quickly, regardless of current locale.
@@ -74,5 +77,5 @@
      * @throws UncheckedParseException if the date does not match any of the supported date formats
      */
-    public static synchronized Date fromString(String str) throws UncheckedParseException {
+    public static synchronized Date fromString(String str) {
         return new Date(tsFromString(str));
     }
@@ -84,5 +87,5 @@
      * @throws UncheckedParseException if the date does not match any of the supported date formats
      */
-    public static synchronized long tsFromString(String str) throws UncheckedParseException {
+    public static synchronized long tsFromString(String str) {
         // "2007-07-25T09:26:24{Z|{+|-}01[:00]}"
         if (checkLayout(str, "xxxx-xx-xxTxx:xx:xxZ") ||
@@ -94,5 +97,10 @@
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx+xx:00") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx-xx:00")) {
-            final Calendar c = checkLayout(str, "xxxx:xx:xx xx:xx:xx") ? calendarLocale : calendar; // consider EXIF date in default timezone
+            final Calendar c; // consider EXIF date in default timezone
+            if (checkLayout(str, "xxxx:xx:xx xx:xx:xx")) {
+                c = getLocalCalendar();
+            } else {
+                c = calendar;
+            }
             c.set(
                 parsePart4(str, 0),
@@ -116,5 +124,6 @@
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx+xx:00") ||
                 checkLayout(str, "xxxx-xx-xxTxx:xx:xx.xxx-xx:00")) {
-            final Calendar c = checkLayout(str, "xxxx:xx:xx xx:xx:xx.xxx") ? calendarLocale : calendar; // consider EXIF date in default timezone
+            // consider EXIF date in default timezone
+            final Calendar c = checkLayout(str, "xxxx:xx:xx xx:xx:xx.xxx") ? getLocalCalendar() : calendar;
             c.set(
                 parsePart4(str, 0),
@@ -134,5 +143,4 @@
             // example date format "18-AUG-08 13:33:03"
             SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yy HH:mm:ss");
-            f.setTimeZone(calendarLocale.getTimeZone());
             Date d = f.parse(str, new ParsePosition(0));
             if (d != null)
@@ -145,4 +153,10 @@
             throw new UncheckedParseException("The date string (" + str + ") could not be parsed.", ex);
         }
+    }
+
+    private static Calendar getLocalCalendar() {
+        final Calendar c = calendarLocale;
+        c.setTimeZone(TimeZone.getDefault());
+        return c;
     }
 
@@ -316,11 +330,3 @@
         return getDateTimeFormat(dateStyle, timeStyle).format(datetime);
     }
-
-    /**
-     * Allows to override the timezone for unit tests.
-     * @param zone the timezone to use
-     */
-    protected static synchronized void setTimeZone(TimeZone zone) {
-        calendarLocale.setTimeZone(zone);
-    }
 }
