From 67a1191a3c89e22d7d67708a7935441d20d3bd47 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Sun, 22 Jul 2018 16:11:32 +0200 Subject: [PATCH] Use UTC timezone in GPX points Fixes #1152 --- .../gadgetbridge/export/GPXExporter.java | 2 +- .../gadgetbridge/util/DateTimeUtils.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java index 323575782..2773f9208 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java @@ -131,7 +131,7 @@ public class GPXExporter implements ActivityTrackExporter { ser.attribute(NS_DEFAULT, "lon", formatLocation(location.getLongitude())); ser.attribute(NS_DEFAULT, "lat", formatLocation(location.getLatitude())); ser.startTag(NS_DEFAULT, "ele").text(formatLocation(location.getAltitude())).endTag(NS_DEFAULT, "ele"); - ser.startTag(NS_DEFAULT, "time").text(formatTime(point.getTime())).endTag(NS_DEFAULT, "time"); + ser.startTag(NS_DEFAULT, "time").text(DateTimeUtils.formatIso8601UTC(point.getTime())).endTag(NS_DEFAULT, "time"); String description = point.getDescription(); if (description != null) { ser.startTag(NS_DEFAULT, "desc").text(description).endTag(NS_DEFAULT, "desc"); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java index b9a577ce8..2977a56fa 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java @@ -51,7 +51,12 @@ public class DateTimeUtils { @Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) { StringBuffer rfcFormat = super.format(date, toAppendTo, pos); - return rfcFormat.insert(rfcFormat.length() - 2, ":"); + if (this.getTimeZone().equals(TimeZone.getTimeZone("UTC"))) { + rfcFormat.setLength(rfcFormat.length()-5); + return rfcFormat.append("Z"); + } else { + return rfcFormat.insert(rfcFormat.length() - 2, ":"); + } } }; //no public access, we have to workaround Android bugs @@ -64,6 +69,17 @@ public class DateTimeUtils { if(GBApplication.isRunningNougatOrLater()){ return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.US).format(date); } + ISO_8601_FORMAT.setTimeZone(TimeZone.getDefault()); + return ISO_8601_FORMAT.format(date); + } + + public static String formatIso8601UTC(Date date) { + if(GBApplication.isRunningNougatOrLater()){ + final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.US); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + return sdf.format(date); + } + ISO_8601_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); return ISO_8601_FORMAT.format(date); }