Index: trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeRestrictionPanel.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeRestrictionPanel.java	(revision 17842)
+++ trunk/src/org/openstreetmap/josm/gui/dialogs/changeset/query/TimeRestrictionPanel.java	(revision 17843)
@@ -10,8 +10,8 @@
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
+import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalTime;
 import java.time.ZoneId;
-import java.util.Date;
 
 import javax.swing.BorderFactory;
@@ -231,14 +231,14 @@
             LocalDate d1 = valClosedAfterDate1.getDate();
             LocalTime d2 = valClosedAfterTime1.getTime();
-            final Date d3 = new Date(d1.atTime(d2).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
+            final Instant d3 = d1.atTime(d2).atZone(ZoneId.systemDefault()).toInstant();
             query.closedAfter(d3);
         } else if (rbClosedAfterAndCreatedBefore.isSelected()) {
             LocalDate d1 = valClosedAfterDate2.getDate();
             LocalTime d2 = valClosedAfterTime2.getTime();
-            Date d3 = new Date(d1.atTime(d2).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
+            Instant d3 = d1.atTime(d2).atZone(ZoneId.systemDefault()).toInstant();
 
             d1 = valCreatedBeforeDate.getDate();
             d2 = valCreatedBeforeTime.getTime();
-            Date d4 = new Date(d1.atTime(d2).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
+            Instant d4 = d1.atTime(d2).atZone(ZoneId.systemDefault()).toInstant();
 
             query.closedAfterAndCreatedBefore(d3, d4);
Index: trunk/src/org/openstreetmap/josm/io/ChangesetQuery.java
===================================================================
--- trunk/src/org/openstreetmap/josm/io/ChangesetQuery.java	(revision 17842)
+++ trunk/src/org/openstreetmap/josm/io/ChangesetQuery.java	(revision 17843)
@@ -4,11 +4,9 @@
 import static org.openstreetmap.josm.tools.I18n.tr;
 
-import java.text.DateFormat;
 import java.text.MessageFormat;
-import java.text.ParseException;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -22,4 +20,5 @@
 import org.openstreetmap.josm.tools.CheckParameterUtil;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.UncheckedParseException;
 import org.openstreetmap.josm.tools.Utils;
 import org.openstreetmap.josm.tools.date.DateUtils;
@@ -45,7 +44,7 @@
     private Bounds bounds;
     /** the date after which changesets have been closed this query is restricted to. null, if no restriction to closure date applies */
-    private Date closedAfter;
+    private Instant closedAfter;
     /** the date before which changesets have been created this query is restricted to. null, if no restriction to creation date applies */
-    private Date createdBefore;
+    private Instant createdBefore;
     /** indicates whether only open changesets are queried. null, if no restrictions regarding open changesets apply */
     private Boolean open;
@@ -155,6 +154,6 @@
      * @since 14039
      */
-    public Date getClosedAfter() {
-        return DateUtils.cloneDate(closedAfter);
+    public Instant getClosedAfter() {
+        return closedAfter;
     }
 
@@ -166,6 +165,6 @@
      * @since 14039
      */
-    public Date getCreatedBefore() {
-        return DateUtils.cloneDate(createdBefore);
+    public Instant getCreatedBefore() {
+        return createdBefore;
     }
 
@@ -270,7 +269,7 @@
      * @throws IllegalArgumentException if d is null
      */
-    public ChangesetQuery closedAfter(Date d) {
+    public ChangesetQuery closedAfter(Instant d) {
         CheckParameterUtil.ensureParameterNotNull(d, "d");
-        this.closedAfter = DateUtils.cloneDate(d);
+        this.closedAfter = d;
         return this;
     }
@@ -287,9 +286,9 @@
      * @throws IllegalArgumentException if createdBefore is null
      */
-    public ChangesetQuery closedAfterAndCreatedBefore(Date closedAfter, Date createdBefore) {
+    public ChangesetQuery closedAfterAndCreatedBefore(Instant closedAfter, Instant createdBefore) {
         CheckParameterUtil.ensureParameterNotNull(closedAfter, "closedAfter");
         CheckParameterUtil.ensureParameterNotNull(createdBefore, "createdBefore");
-        this.closedAfter = DateUtils.cloneDate(closedAfter);
-        this.createdBefore = DateUtils.cloneDate(createdBefore);
+        this.closedAfter = closedAfter;
+        this.createdBefore = createdBefore;
         return this;
     }
@@ -357,13 +356,11 @@
                 sb.append('&');
             }
-            DateFormat df = DateUtils.newIsoDateTimeFormat();
-            sb.append("time=").append(df.format(closedAfter));
-            sb.append(',').append(df.format(createdBefore));
+            sb.append("time=").append(closedAfter);
+            sb.append(',').append(createdBefore);
         } else if (closedAfter != null) {
             if (sb.length() > 0) {
                 sb.append('&');
             }
-            DateFormat df = DateUtils.newIsoDateTimeFormat();
-            sb.append("time=").append(df.format(closedAfter));
+            sb.append("time=").append(closedAfter);
         }
 
@@ -466,12 +463,11 @@
         }
 
-        protected Date parseDate(String value, String parameter) throws ChangesetQueryUrlException {
+        protected Instant parseDate(String value, String parameter) throws ChangesetQueryUrlException {
             if (value == null || value.trim().isEmpty())
                 throw new ChangesetQueryUrlException(
                         tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value));
-            DateFormat formatter = DateUtils.newIsoDateTimeFormat();
             try {
-                return formatter.parse(value);
-            } catch (ParseException e) {
+                return DateUtils.parseInstant(value);
+            } catch (UncheckedParseException e) {
                 throw new ChangesetQueryUrlException(
                         tr("Unexpected value for ''{0}'' in changeset query url, got {1}", parameter, value), e);
@@ -479,5 +475,5 @@
         }
 
-        protected Date[] parseTime(String value) throws ChangesetQueryUrlException {
+        protected Instant[] parseTime(String value) throws ChangesetQueryUrlException {
             String[] dates = value.split(",", -1);
             if (dates.length == 0 || dates.length > 2)
@@ -485,8 +481,8 @@
                         tr("Unexpected value for ''{0}'' in changeset query url, got {1}", "time", value));
             if (dates.length == 1)
-                return new Date[]{parseDate(dates[0], "time")};
+                return new Instant[]{parseDate(dates[0], "time")};
             else if (dates.length == 2)
-                return new Date[]{parseDate(dates[0], "time"), parseDate(dates[1], "time")};
-            return new Date[]{};
+                return new Instant[]{parseDate(dates[0], "time"), parseDate(dates[1], "time")};
+            return new Instant[]{};
         }
 
@@ -524,5 +520,5 @@
                     break;
                 case "time":
-                    Date[] dates = parseTime(entry.getValue());
+                    Instant[] dates = parseTime(entry.getValue());
                     switch(dates.length) {
                     case 1:
