1

我在从 RSS 源解析标签时遇到问题。

格式如下:Mon, 16 Apr 2012 16:42:30 +0000

我创建了一个函数parseDate来解决这个问题,但事实是它使用 Locale.US 解析日期,它返回日期但使用美国语言环境,因此它返回时间 +2 小时。如果我不提供 Locale.US 参数,我会得到 ParseException。

我怎样才能完成正确的解析,以便提供的日期对于任何本地都是正确的?

这是功能:

public String parseDate (String dateraw){
        String returndate;

        try {String format = "EEE, dd MMM yyyy kk:mm:ss Z";
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy kk:mm:ss z",Locale.US);
        Date formatedDate = sdf.parse(dateraw);

        Calendar c= Calendar.getInstance();
        c.setTime(formatedDate);



        returndate=""+c.get(Calendar.DAY_OF_MONTH)+"/"+c.get(Calendar.MONTH)+"/"+c.get(Calendar.YEAR)+" "+c.get(Calendar.HOUR_OF_DAY)+":"+c.get(Calendar.MINUTE);
            return returndate;
        } catch (ParseException e) {
            e.printStackTrace();
            // TODO Auto-generated catch block
            return "NO DATE AVAILABLE";

        }
    }
4

1 回答 1

0

您的代码工作正常。日期被解析并且不依赖于时区。尝试打印您当前的时区或日历时区,看看是否正确:

        //...            
        Calendar c = Calendar.getInstance();
        c.setTime(formatedDate);
        Log.i(TAG, c.getTimeZone().getID());
        Log.i(TAG, TimeZone.getDefault().getID());
        //...
于 2012-11-21T14:30:34.153 回答