Ошибка синтаксического анализа отметки времени - PullRequest
0 голосов
/ 14 марта 2012

Таким образом, я изменяю одно из приложений с открытым исходным кодом Google I / O (2010) и получаю следующую ошибку при попытке синхронизировать приложение с использованием настраиваемой электронной таблицы Google, с теми же заголовками и другими данными (кажется, синхронизируется нормально с таблицей Google по умолчанию)

"Ошибка синхронизации: временная метка при разборе проблемы: java.text.ParseException: не разбираемая дата:" ноль 2010 10:45 утра -0700 "

Это код Java, который выдает ошибку

     private static long parseTime(String date, String time) throws HandlerException {
    final String composed = String.format("%s 2010 %s -0700", date, time);
    try {
        return sTimeFormat.parse(composed).getTime();
    } catch (java.text.ParseException e) {
        throw new HandlerException("Problem parsing timestamp", e);
    }
    }

Вот ссылки на информацию (Atom), которую он пытается проанализировать: Мои данные https://spreadsheets.google.com/feeds/worksheets/0AmvmSNjQXtJFdE1lTlFxVXZCLUN0OFpqa3oyM2d4bEE/public/basic

Данные Google http://spreadsheets.google.com/feeds/worksheets/twd6syM493oFqIFWeIm8qGw/public/basic"

Я не могу понять, почему я получаю эту ошибку. Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 14 марта 2012

Проверьте дату параметра, которую вы передаете этому методу. Кажется, это null, что, очевидно, не является действительной датой.

0 голосов
/ 14 марта 2012

Поскольку @henrik уже опубликовал вашу текущую проблему, я даю несколько рекомендаций на основе вашего опубликованного кода:

  1. Вы используете sTimeFormat, которая должна быть не менее static переменной, а также, вероятно, final (и, как правило, должно быть, в этом контексте). Тем не менее, вы не следуете соглашениям по присвоению имен - вероятно, оно должно называться TIMESTAMP_FORMATTER (если единственное, что вы делаете, это получаете фактическую дату, используйте TIMESTAMP_PARSER). Кроме того, хотя вы вряд ли будете использовать несколько потоков на устройстве Android, имейте в виду, DateFormat и SimpleDateFormat являются НЕ потокобезопасными - стандартная практика заключается в создании копии для каждого использования.
  2. Вы вручную форматируете временную метку, прежде чем пытаться ее проанализировать. Нет никакого смысла - вы должны использовать существующие данные (либо непосредственно из xml, либо из визуализированного html) и предоставлять пользовательскую строку форматирования.
  3. Вы устанавливаете две части даты, года и часового пояса. Как минимум, это должно быть перемещено за пределы фактической части разбора. Вам, вероятно, следует написать метод setToCanonicalDate или что-то, что берет результаты анализа и устанавливает для него действительный год и часовой пояс. И как далеко вы распространяете это приложение? Я живу в тихоокеанском часовом поясе - ваш дефолт не принесет мне пользы.
0 голосов
/ 14 марта 2012

Вот как вы можете работать со временем и долго:

Calendar c = Calendar.getInstance();

c.set(Calendar.DAY_OF_MONTH, dp.getDayOfMonth());
c.set(Calendar.MONTH, dp.getMonth());;
c.set(Calendar.YEAR, dp.getYear());

long l = c.getTime().getTime();
...