Android SimpleDateFormat Unparsable Date

时间:2016-10-19 10:46:45

标签: java android simpledateformat parse-error

我得到了这个日期字符串,例如:

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");

此处的解决方案:Unparseable date: "Fri Oct 10 23:11:07 IST 2014" (at offset 20)

3 个答案:

答案 0 :(得分:2)

请在其中添加额外的d:

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

答案 1 :(得分:2)

 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;

答案 2 :(得分:0)

你的condition.getString(“date”)和“SimpleDateFormat sdf = new SimpleDateFormat(”EEE,dd MMM yyyy hh:m a z“,Locale.US)中的格式;”不匹配。