diff options
| -rw-r--r-- | src/com/isode/stroke/base/DateTime.java | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/com/isode/stroke/base/DateTime.java b/src/com/isode/stroke/base/DateTime.java index 4c8310a..3cceb09 100644 --- a/src/com/isode/stroke/base/DateTime.java +++ b/src/com/isode/stroke/base/DateTime.java | |||
| @@ -12,13 +12,34 @@ import java.util.Locale; | |||
| 12 | import java.util.TimeZone; | 12 | import java.util.TimeZone; |
| 13 | 13 | ||
| 14 | public class DateTime { | 14 | public class DateTime { |
| 15 | |||
| 16 | // Cannot use Java 7 'X' format specifier for timezone | ||
| 17 | // (not supported on Android) | ||
| 15 | public static Date stringToDate(String date) { | 18 | public static Date stringToDate(String date) { |
| 16 | SimpleDateFormat parser = new SimpleDateFormat(format, Locale.US); | 19 | if (date == null || date.length() < 1) return null; |
| 20 | SimpleDateFormat parser; | ||
| 21 | if (date.charAt(date.length()-1) == 'Z') { | ||
| 22 | parser = new SimpleDateFormat(parseFormatZ, Locale.US); | ||
| 23 | } else { | ||
| 24 | parser = new SimpleDateFormat(parseFormatTz, Locale.US); | ||
| 25 | } | ||
| 17 | parser.setTimeZone(TimeZone.getTimeZone("UTC")); | 26 | parser.setTimeZone(TimeZone.getTimeZone("UTC")); |
| 18 | try { | 27 | try { |
| 19 | return parser.parse(date); | 28 | return parser.parse(date); |
| 20 | } catch (ParseException e) { | 29 | } catch (ParseException e) { |
| 21 | return null; | 30 | if (date.matches(".*[+-]\\d\\d:\\d\\d")) { // strip ':' from timezone |
| 31 | date = date.substring(0, date.length()-3) + date.substring(date.length()-2); | ||
| 32 | } else if (date.matches(".*[+-]\\d\\d")) { // make timezone 4 digits (append minutes) | ||
| 33 | date += "00"; | ||
| 34 | } else { | ||
| 35 | parser = new SimpleDateFormat(parseFormatNoTz, Locale.US); | ||
| 36 | parser.setTimeZone(TimeZone.getTimeZone("UTC")); | ||
| 37 | } | ||
| 38 | try { | ||
| 39 | return parser.parse(date); | ||
| 40 | } catch (ParseException e1) { | ||
| 41 | return null; | ||
| 42 | } | ||
| 22 | } | 43 | } |
| 23 | } | 44 | } |
| 24 | 45 | ||
| @@ -28,5 +49,8 @@ public class DateTime { | |||
| 28 | return parser.format(date); | 49 | return parser.format(date); |
| 29 | } | 50 | } |
| 30 | 51 | ||
| 31 | static private String format = "yyyy-MM-dd'T'HH:mm:ssXXX"; | 52 | static private String format = "yyyy-MM-dd'T'HH:mm:ss'Z'"; |
| 53 | static private String parseFormatTz = "yyyy-MM-dd'T'HH:mm:ssZ"; | ||
| 54 | static private String parseFormatZ = "yyyy-MM-dd'T'HH:mm:ss'Z'"; | ||
| 55 | static private String parseFormatNoTz = "yyyy-MM-dd'T'HH:mm:ss"; | ||
| 32 | } | 56 | } |
Swift