Проблемы с извлечением даты в Java с помощью регулярного выражения - PullRequest
2 голосов
/ 08 декабря 2011

Для определенного API я получаю даты в формате /Date(1323312018479-0700)/. По некоторым причинам регулярное выражение, которое я использую, не приводит ни к каким совпадениям.

Есть идеи?

Кстати: я сейчас не учитываю часовой пояс.

public static Date parseApiDate(String rawDate) {
    Pattern p = Pattern.compile("([0-9]+)-([0-9]+)", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(rawDate);

    Log.d("DATE CONVERSION: Raw", rawDate);
    if (m.matches()) {
        String utc = m.group(1);
        int milliSeconds = Integer.parseInt(utc);
        Date date = new Date(milliSeconds);

        Log.d("DATE CONVERSION: milliseconds", utc);
        Log.d("DATE CONVERSION: Converted", date.toGMTString());

        return date;
    } else {    
        return new Date(0);
    }
}

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Вам нужно m.find() вместо m.matches(). Тогда вам понадобится Long.parseLong()

Как правило, вы должны анализировать даты с DateFormat (SimpleDateFormat), но в этом случае это не справится. Шаблон SZ терпит неудачу, возможно, потому что он не уверен, где начинается часовой пояс (хотя он должен быть в состоянии сделать это)

0 голосов
/ 08 декабря 2011

Попробуйте с

Pattern p = Pattern.compile(".*?([0-9]+)-([0-9]+).*?", Pattern.CASE_INSENSITIVE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...