Android SimpleDateFormat Неразборная дата

я получил эту строку даты, например:

Wed, 19 Oct 2016 12:00 PM CEST

теперь я пытаюсь преобразовать его в календарь с помощью SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy hh:m a zzz", Locale.US);

И когда я пытаюсь разобрать его, я получаю следующую ошибку:

Unparseable date: "Wed, 19 Oct 2016 12:00 PM CEST" (at offset 26)

Я ценю каждую помощь!

Изменить:

Полный код разбора:

@Override
public WeatherData parseCurrentWeatherData(String jsonString) {

    WeatherData weatherData = new WeatherData();

    try {
        JSONObject obj = new JSONObject(jsonString);

        JSONObject mainObj = obj.getJSONObject("query").getJSONObject("results").getJSONObject("channel");

        JSONObject condition = mainObj.getJSONObject("item").getJSONObject("condition");

        Calendar cal = new GregorianCalendar();
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy hh:m a z", Locale.US);
        cal.setTime(sdf.parse(condition.getString("date")));

        weatherData.setCalendar(cal);

    } catch(JSONException | ParseException ex) {
        Log.e("DataFetcher", ex.getLocalizedMessage());
    }

    return weatherData;
}

Решение:

Похоже, Android не может разобрать некоторые часовые пояса. Спасибо @Burhanuddin Rashid за такой подход.

String strDate = condition.getString("date").replace("CEST", "GMT+0200");

Решение здесь: Неразборная дата: пятница, 10 октября, 23 :11:07 IST 2014 (по смещению 20)


person lhuber    schedule 19.10.2016    source источник
comment
Ваш код работает хорошо.   -  person saka1029    schedule 19.10.2016
comment
Но почему тогда я получаю ошибку синтаксического анализа в своей среде?   -  person lhuber    schedule 19.10.2016
comment
Можете ли вы опубликовать свой полный код синтаксического анализа?   -  person 0riginal    schedule 19.10.2016
comment
я обновил свой вопрос @0riginal   -  person lhuber    schedule 19.10.2016
comment
Просто попробуйте напечатать condition.getString(date), чтобы проверить, получаете ли вы правильную строку.   -  person Muzy    schedule 19.10.2016
comment
я уже проверил это, и да, я получил правильную строку @Muzy   -  person lhuber    schedule 19.10.2016
comment
когда я записываю строку, я получаю эту строку: D/YahooWeatherDataParser: Wed, 19 Oct 2016 12:00 CEST - так что все в порядке   -  person lhuber    schedule 19.10.2016


Ответы (3)


Пожалуйста, добавьте в него дополнительный d, например:

    SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy hh:m a zzz", Locale.US);
    sdf.setLenient(true);
person Burhanuddin Rashid    schedule 19.10.2016
comment
Попробуйте установить это sdf.setLenient(true); - person Burhanuddin Rashid; 19.10.2016
comment
Попробуйте удалить запятую (,) из EEE, dd MMM yyyy hh:m a zzz и из condition.getString("date") из этой запятой (,) ничего подобного condition.getString("date").replace(",","") - person Burhanuddin Rashid; 19.10.2016
comment
Все еще есть ошибка Unparseable date: Wed 19 Oct 2016 13:00 CEST (по смещению 25) - person lhuber; 19.10.2016
comment
Я думаю, может быть, это связано с CEST, потому что он всегда выдает ошибку в позиции смещения от CEST? - person lhuber; 19.10.2016
comment
Кажется, это проблема IST, на которую вы можете сослаться, это может помочь: stackoverflow.com/questions/27375489/ - person Burhanuddin Rashid; 19.10.2016

 public static void main(String[] args) throws ParseException {
    String dateString = "Wed, 19 Oct 2016 12:00 PM CEST";
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy hh:m a zzz", Locale.US);
    Date date = sdf.parse(dateString);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    System.out.println(calendar);
  }

То же самое сработало для меня.

Убедитесь, что все импортированные данные верны

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
person Muzy    schedule 19.10.2016

Ваше условие.getString("date") и формат в "SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy hh:m a z", Locale.US);" не совпадает.

person Çağatay Karslı    schedule 19.10.2016
comment
вот он @Çagatay Karslı - person lhuber; 19.10.2016