aboutsummaryrefslogtreecommitdiffstats
path: root/src/cgeo/geocaching/files/GPXParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgeo/geocaching/files/GPXParser.java')
-rw-r--r--src/cgeo/geocaching/files/GPXParser.java19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/cgeo/geocaching/files/GPXParser.java b/src/cgeo/geocaching/files/GPXParser.java
index 1a9bd7c..2a3b167 100644
--- a/src/cgeo/geocaching/files/GPXParser.java
+++ b/src/cgeo/geocaching/files/GPXParser.java
@@ -4,7 +4,10 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -31,6 +34,9 @@ import cgeo.geocaching.connector.ConnectorFactory;
public abstract class GPXParser extends FileParser {
+ private static final SimpleDateFormat formatSimple = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // 2010-04-20T07:00:00Z
+ private static final SimpleDateFormat formatTimezone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'.000'Z"); // 2010-04-20T01:01:03.000-04:00
+
private static final Pattern patternGeocode = Pattern.compile("([A-Z]{2}[0-9A-Z]+)", Pattern.CASE_INSENSITIVE);
private static final String[] nsGCList = new String[] {
"http://www.groundspeak.com/cache/1/1", // PQ 1.1
@@ -65,6 +71,15 @@ public abstract class GPXParser extends FileParser {
version = versionIn;
}
+ private static Date parseDate(String input) throws ParseException {
+ input = input.trim();
+ if (input.length() >= 3 && input.charAt(input.length() - 3) == ':') {
+ String removeColon = input.substring(0, input.length() - 3) + input.substring(input.length() - 2);
+ return formatTimezone.parse(removeColon);
+ }
+ return formatSimple.parse(input);
+ }
+
public long parse(File file, Handler handlerIn) {
handler = handlerIn;
if (file == null) {
@@ -137,7 +152,7 @@ public abstract class GPXParser extends FileParser {
@Override
public void end(String body) {
try {
- cache.hidden = cgBase.dateGPXIn.parse(body.trim());
+ cache.hidden = parseDate(body);
} catch (Exception e) {
Log.w(cgSettings.tag, "Failed to parse cache date: " + e.toString());
}
@@ -478,7 +493,7 @@ public abstract class GPXParser extends FileParser {
@Override
public void end(String body) {
try {
- log.date = cgBase.dateGPXIn.parse(body.trim()).getTime();
+ log.date = parseDate(body).getTime();
} catch (Exception e) {
Log.w(cgSettings.tag, "Failed to parse log date: " + e.toString());
}