diff --git a/src/org/openstreetmap/josm/io/NmeaReader.java b/src/org/openstreetmap/josm/io/NmeaReader.java
index 62179e6..a803059 100644
--- a/src/org/openstreetmap/josm/io/NmeaReader.java
+++ b/src/org/openstreetmap/josm/io/NmeaReader.java
@@ -19,6 +19,7 @@ import org.openstreetmap.josm.data.gpx.GpxConstants;
 import org.openstreetmap.josm.data.gpx.GpxData;
 import org.openstreetmap.josm.data.gpx.ImmutableGpxTrack;
 import org.openstreetmap.josm.data.gpx.WayPoint;
+import org.openstreetmap.josm.tools.date.DateUtils;
 
 /**
  * Reads a NMEA file. Based on information from
@@ -165,6 +166,8 @@ public class NmeaReader {
     }
 
     public NmeaReader(InputStream source) throws IOException {
+        rmcTimeFmt.setTimeZone(DateUtils.UTC);
+        rmcTimeFmtStd.setTimeZone(DateUtils.UTC);
 
         // create the data tree
         data = new GpxData();
diff --git a/src/org/openstreetmap/josm/tools/date/DateUtils.java b/src/org/openstreetmap/josm/tools/date/DateUtils.java
index b956925..3cbb811 100644
--- a/src/org/openstreetmap/josm/tools/date/DateUtils.java
+++ b/src/org/openstreetmap/josm/tools/date/DateUtils.java
@@ -29,6 +29,11 @@ import org.openstreetmap.josm.tools.UncheckedParseException;
  */
 public final class DateUtils {
 
+    /**
+     * The UTC time zone.
+     */
+    public static final TimeZone UTC = TimeZone.getTimeZone("UTC");
+
     protected DateUtils() {
         // Hide default constructor for utils classes
     }
@@ -45,7 +50,7 @@ public final class DateUtils {
      * The shared instance is used because the construction, together
      * with the timezone lookup, is very expensive.
      */
-    private static final GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
+    private static final GregorianCalendar calendar = new GregorianCalendar(UTC);
     private static final GregorianCalendar calendarLocale = new GregorianCalendar(TimeZone.getDefault());
     private static final DatatypeFactory XML_DATE;
 
diff --git a/test/unit/org/openstreetmap/josm/io/NmeaReaderTest.java b/test/unit/org/openstreetmap/josm/io/NmeaReaderTest.java
index 88f6ad7..b3172ef 100644
--- a/test/unit/org/openstreetmap/josm/io/NmeaReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/io/NmeaReaderTest.java
@@ -9,18 +9,27 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.TimeZone;
 
+import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.gpx.GpxConstants;
 import org.openstreetmap.josm.data.gpx.WayPoint;
 import org.openstreetmap.josm.io.NmeaReader.NMEA_TYPE;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 /**
  * Unit tests of {@link NmeaReader} class.
  */
 public class NmeaReaderTest {
+    /**
+     * Set the timezone and timeout.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
 
     /**
      * Unit test of methods {@link NMEA_TYPE#equals} and {@link NMEA_TYPE#hashCode}.
@@ -36,20 +45,20 @@ public class NmeaReaderTest {
      */
     @Test
     public void testReader() throws Exception {
+        TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin"));
         final NmeaReader in = new NmeaReader(new FileInputStream("data_nodist/btnmeatrack_2016-01-25.nmea"));
         assertEquals(30, in.getNumberOfCoordinates());
         assertEquals(0, in.getParserMalformed());
 
-        TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin"));
         final List<WayPoint> wayPoints = new ArrayList<>(in.data.tracks.iterator().next().getSegments().iterator().next().getWayPoints());
-        assertEquals("2016-01-25T04:05:09.200Z", wayPoints.get(0).get(GpxConstants.PT_TIME));
-        assertEquals("2016-01-25T04:05:09.400Z", wayPoints.get(1).get(GpxConstants.PT_TIME));
-        assertEquals("2016-01-25T04:05:09.600Z", wayPoints.get(2).get(GpxConstants.PT_TIME));
+        assertEquals("2016-01-25T05:05:09.200Z", wayPoints.get(0).get(GpxConstants.PT_TIME));
+        assertEquals("2016-01-25T05:05:09.400Z", wayPoints.get(1).get(GpxConstants.PT_TIME));
+        assertEquals("2016-01-25T05:05:09.600Z", wayPoints.get(2).get(GpxConstants.PT_TIME));
 
         final SimpleDateFormat iso8601 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
-        assertEquals("2016-01-25T05:05:09.200+01", iso8601.format(wayPoints.get(0).getTime()));
-        assertEquals("2016-01-25T05:05:09.400+01", iso8601.format(wayPoints.get(1).getTime()));
-        assertEquals("2016-01-25T05:05:09.600+01", iso8601.format(wayPoints.get(2).getTime()));
+        assertEquals("2016-01-25T06:05:09.200+01", iso8601.format(wayPoints.get(0).getTime()));
+        assertEquals("2016-01-25T06:05:09.400+01", iso8601.format(wayPoints.get(1).getTime()));
+        assertEquals("2016-01-25T06:05:09.600+01", iso8601.format(wayPoints.get(2).getTime()));
 
         assertEquals(new LatLon(46.98807, -1.400525), wayPoints.get(0).getCoor());
         assertEquals("38.9", wayPoints.get(0).get(GpxConstants.PT_ELE));
diff --git a/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java b/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
index a6033d0..9fba4cd 100644
--- a/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
+++ b/test/unit/org/openstreetmap/josm/testutils/JOSMTestRules.java
@@ -19,6 +19,7 @@ import org.openstreetmap.josm.io.OsmApi;
 import org.openstreetmap.josm.io.OsmApiInitializationException;
 import org.openstreetmap.josm.io.OsmTransferCanceledException;
 import org.openstreetmap.josm.tools.I18n;
+import org.openstreetmap.josm.tools.date.DateUtils;
 
 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 
@@ -164,7 +165,7 @@ public class JOSMTestRules implements TestRule {
         // Tests are running headless by default.
         System.setProperty("java.awt.headless", "true");
         // All tests use the same timezone.
-        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+        TimeZone.setDefault(DateUtils.UTC);
         // Set log level to info
         Main.logLevel = 3;
 
diff --git a/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java b/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
index ae18936..7ae3e3a 100644
--- a/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
+++ b/test/unit/org/openstreetmap/josm/tools/ExifReaderTest.java
@@ -14,17 +14,29 @@ import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.TimeZone;
 
+import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.openstreetmap.josm.TestUtils;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.tools.date.DateUtils;
 import org.openstreetmap.josm.tools.date.DateUtilsTest;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
+
 /**
  * EXIF metadata extraction test
  * @since 6209
  */
 public class ExifReaderTest {
+    /**
+     * Set the timezone and timeout.
+     */
+    @Rule
+    @SuppressFBWarnings(value = "URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD")
+    public JOSMTestRules test = new JOSMTestRules();
 
     private File orientationSampleFile, directionSampleFile;
 
@@ -39,13 +51,21 @@ public class ExifReaderTest {
     }
 
     /**
+     * Clean {@link DateUtils} state
+     */
+    @After
+    public void done() {
+        DateUtilsTest.setTimeZone(DateUtils.UTC);
+    }
+
+    /**
      * Test time extraction
      * @throws ParseException if {@link ExifReader#readTime} fails to parse date/time of sample file
      */
     @Test
     public void testReadTime() throws ParseException {
         Date date = ExifReader.readTime(directionSampleFile);
-        assertEquals(new GregorianCalendar(2010, Calendar.MAY, 15, 17, 12, 05).getTime(), date);
+        assertEquals(new GregorianCalendar(2010, Calendar.MAY, 15, 15, 12, 05).getTime(), date);
     }
 
     /**
@@ -56,7 +76,7 @@ public class ExifReaderTest {
     public void testReadTimeSubSecond1() throws ParseException {
         Date date = ExifReader.readTime(new File("data_nodist/IMG_20150711_193419.jpg"));
         String dateStr = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(date);
-        assertEquals("2015-07-11T19:34:19.100", dateStr);
+        assertEquals("2015-07-11T17:34:19.100", dateStr);
     }
 
     /**
@@ -96,6 +116,6 @@ public class ExifReaderTest {
     public void testTicket11685() throws IOException {
         File file = new File(TestUtils.getRegressionDataFile(11685, "2015-11-08_15-33-27-Xiaomi_YI-Y0030832.jpg"));
         String dateStr = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(ExifReader.readTime(file));
-        assertEquals("2015-11-08T15:33:27.500", dateStr);
+        assertEquals("2015-11-08T14:33:27.500", dateStr);
     }
 }
