1

我正在开发一个 Android 应用程序,它处理来自许多报纸的日期并处理许多日期格式。我几乎是在进行非常手动的解析,但非常令人惊讶的是,当我在 ICS 设备上尝试该应用程序时,我得到的结果与我在 JB 设备上的结果不同。当我从一些从 XMls 解析的字符串中构造一个我称之为 new 的对象时,就会发生有问题的解析

 public class NewNew implements Parcelable, Comparable<NewNew>{

private String title;
private String link;
private String description;
private Date pubDate;
private String img;
private String country;

 public NewNew (String t, String l, String d, String f, String i, String c)
{
    this.title= t;
    this.link = l;
    this.description = d;

    //convert string to date
    Date date = toDate(f) ;
    this.pubDate= date;

    this.img=i;
    this.country=c;
}

 public Date toDate (String dateText)
{
Date d=null;
//Sat, 03 Aug 2013 17:06:30 +0000 that is the value of dateText
        SimpleDateFormat df5 = new SimpleDateFormat("dd MMM yyyy HH:mm:ss Z", Locale.getDefault());
d =  df5.parse(dateText.substring(5));
return d;
}
}

非常令人惊讶的是,它在 ICS 中创建了一个 Date 对象,但在 JB 设备中却没有。我试图更改设备配置(手动或自动设置时区和时间,它没有任何区别)

不确定是否相关,但 ICS 版本是 4.0.4 和 JB 4.3


我通过将 SimpleDateFormat 的构造函数中的 Locale.getDefault() 替换为已定义的 Locale(在我的情况下为 Locale.US)来解决此问题。这不是我想要的,但是一旦我构建了 Date 对象,我就可以手动打印它,在 SimpleDateFormat 中设置模式

TextView dateTextView = (TextView)findViewById(R.id.dateTextView);
SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, HH:mm");
dateTextView.setText(sdf.format(d);

此外,XMLs pubDate 的格式存在一些解析错误。即使你在调试时没有看到它们被写入,你也会注意到它们上有一些带有 html /n 或 /t 的日期。我使用以下代码删除它们

 public String stripHtml(String html) {

     SpannableStringBuilder spannedStr = (SpannableStringBuilder) Html
                .fromHtml(html.trim());
        Object[] spannedObjects = spannedStr.getSpans(0, spannedStr.length(),
                Object.class);
        for (int i = 0; i < spannedObjects.length; i++) {
            if (spannedObjects[i] instanceof ImageSpan) {
                ImageSpan imageSpan = (ImageSpan) spannedObjects[i];
                spannedStr.replace(spannedStr.getSpanStart(imageSpan),
                        spannedStr.getSpanEnd(imageSpan), "");
            }
        }
        String textWeb = spannedStr.toString();
        return Html.fromHtml(textWeb).toString();

    }

在尝试将其解析为日期之前,我将此方法应用于文本解析表单 XML

4

0 回答 0