Разбор даты Android - PullRequest
       2

Разбор даты Android

0 голосов
/ 31 января 2012

У меня есть следующая строка, мне нужно разобрать дату:

2012-01-31T08:41:12.5462495+01:00

Теперь я попробовал следующий код, который не работает:

public static String FORMAT_DATE_ISO = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";

public static Date fromISODateString(String isoDateString) throws Exception {
    DateFormat f = new SimpleDateFormat(FORMAT_DATE_ISO);
    f.setTimeZone(TimeZone.getTimeZone("Zulu"));
    return f.parse(isoDateString);
}

Я предполагаюпотому что часовой пояс должен быть что-то вроде +0100, а в моем случае это +01: 00.

как мне решить эту проблему?Спасибо.

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Есть две проблемы:

  • Спецификатор часового пояса
  • Точность ваших секунд

Я не нашел простого способа исправить часть спецификатора часового пояса в SimpleDateFormat, поэтому я бы соблазнился просто манипулировать строкой - это фиксированная длина, поэтому нетрудно удалить последний двоеточие. Тогда вы можете использовать

"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"

в качестве строки формата. Обратите внимание, что согласно документам , Joda Time обрабатывает смещения часовых поясов, используя двоеточия, так что это еще один вариант.

0 голосов
/ 31 января 2012

Спасибо @Jon Skeet за строку формата.

мне удалось заменить последнее двоеточие, используя

 isoDateString = isoDateString.replaceFirst("(.*):(..)", "$1$2");

поэтому рабочий код для этого будет:

public static String FORMAT_DATE_ISO = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ";

public static Date fromISODateString(String isoDateString) throws Exception {
        isoDateString = isoDateString.replaceFirst("(.*):(..)", "$1$2");
        DateFormat f = new SimpleDateFormat(FORMAT_DATE_ISO);
        f.setTimeZone(TimeZone.getTimeZone("Zulu"));
        return f.parse(isoDateString);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...