Android 解析异常,不可解析的日期

Android 解析异常,不可解析的日期,android,parsing,date,simpledateformat,Android,Parsing,Date,Simpledateformat,每次我在nexus 5智能手机上执行我的应用程序时,我都会遇到这个异常,但当我在平板电脑nexus 7上测试它时,它不会发生,这是为什么?下面是课堂: package com.example.unisannioavvisiv1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class RSS

每次我在nexus 5智能手机上执行我的应用程序时,我都会遇到这个异常,但当我在平板电脑nexus 7上测试它时,它不会发生,这是为什么?下面是课堂:

package com.example.unisannioavvisiv1;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;


public class RSSItem 
{
    private String titolo = null;
    private String descrizione = null;
    private String link = null;
    private String dataPub = null;

    private SimpleDateFormat  dataOutFormato =
            new SimpleDateFormat("EEE dd/MM/yy HH:mm ", Locale.getDefault());
    private SimpleDateFormat dataInFormato =
            new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.getDefault());
    public String getTitolo() {
        return titolo;
    }

    public void setTitolo(String titolo) {
        this.titolo = titolo;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public String getLink() {
        return link;
    }

    public void setLink(String link) {
        this.link = link;
    }

    public String getDataPub() {
        return dataPub;
    }

    public void setDataPub(String dataPub) {
        this.dataPub = dataPub;
    }


    /*
     * Un funzione che converte la data di pubblicazione dalla modalita' lunga
     * in una piu' semplice da leggere per il lettore. Va bene per il formato anglosassone.
     */
    public String ottieniDataPubFormattata()
    {
        try
        {
            Date data = this.dataInFormato.parse(this.dataPub.trim());
            String dataPubFormattata =  this.dataOutFormato.format(data);
            return dataPubFormattata;

        }
        catch(ParseException e)
        {
            throw new RuntimeException(e);
        }
    }


}
这是我在应用程序执行时在日志中得到的:

09-17 14:13:10.325: D/dalvikvm(28669): GC_FOR_ALLOC freed 240K, 2% free 17032K/17304K, paused 16ms, total 16ms
09-17 14:13:10.505: D/Avvisi Unisannio_FileIO_downloadFile_OK(28669): File Exists!   /data/data/com.example.unisannioavvisiv1/files/avvisi_feed.xml
09-17 14:13:10.505: D/Unisannio Avvisi(28669): Feed scaricati
09-17 14:13:10.565: D/dalvikvm(28669): GC_FOR_ALLOC freed 302K, 2% free 17242K/17576K, paused 9ms, total 9ms
09-17 14:13:10.585: D/Unisannio Avvisi ASYNC TASK(28669): Feed letti
09-17 14:13:10.595: D/AndroidRuntime(28669): Shutting down VM
09-17 14:13:10.595: W/dalvikvm(28669): threadid=1: thread exiting with uncaught exception (group=0x415f2ba8)
09-17 14:13:10.595: E/AndroidRuntime(28669): FATAL EXCEPTION: main
09-17 14:13:10.595: E/AndroidRuntime(28669): Process: com.example.unisannioavvisiv1, PID: 28669
09-17 14:13:10.595: E/AndroidRuntime(28669): java.lang.RuntimeException: java.text.ParseException: Unparseable date: "Wed, 17 Sep 2014 12:49:19 +0200" (at offset 0)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at com.example.unisannioavvisiv1.RSSItem.ottieniDataPubFormattata(RSSItem.java:68)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at com.example.unisannioavvisiv1.ElencoAvvisiActivity.aggiorna_e_visualizza(ElencoAvvisiActivity.java:134)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at com.example.unisannioavvisiv1.ElencoAvvisiActivity$ReadFeed.onPostExecute(ElencoAvvisiActivity.java:108)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at com.example.unisannioavvisiv1.ElencoAvvisiActivity$ReadFeed.onPostExecute(ElencoAvvisiActivity.java:1)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at android.os.AsyncTask.finish(AsyncTask.java:632)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at android.os.Handler.dispatchMessage(Handler.java:102)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at android.os.Looper.loop(Looper.java:136)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at android.app.ActivityThread.main(ActivityThread.java:5001)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at java.lang.reflect.Method.invokeNative(Native Method)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at java.lang.reflect.Method.invoke(Method.java:515)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at dalvik.system.NativeStart.main(Native Method)
09-17 14:13:10.595: E/AndroidRuntime(28669): Caused by: java.text.ParseException: Unparseable date: "Wed, 17 Sep 2014 12:49:19 +0200" (at offset 0)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at java.text.DateFormat.parse(DateFormat.java:555)
09-17 14:13:10.595: E/AndroidRuntime(28669):    at com.example.unisannioavvisiv1.RSSItem.ottieniDataPubFormattata(RSSItem.java:61)
09-17 14:13:10.595: E/AndroidRuntime(28669):    ... 14 more
09-17 14:13:12.035: I/Process(28669): Sending signal. PID: 28669 SIG: 9

如果要分析的日期时间字符串始终为英语,请使用
Locale.US
而不是
Locale.getDefault()
使用您的
SimpleDateFormat
s将它们解析为美式英语,而不是设备的当前设置(如意大利语)。

问题在于我的输入日期格式是英语,而nexus 5是意大利语。因此,我的defalut区域设置将启动en异常。这就是我解决问题的方法,多亏了布莱克贝尔和拉尔托的帮助

private SimpleDateFormat  dataOutFormato =
        new SimpleDateFormat("EEE dd/MM/yy HH:mm ", Locale.ITALIAN);
private SimpleDateFormat dataInFormato =
        new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
public String getTitolo() {
    return titolo;
}

这与您的问题完全无关,但最好用英语对所有内容进行编码:)

您的另一台设备是否设置为英语,而另一台设备是否设置为非英语?注意
Locale.getDefault()
。我的Nexus7应用程序是用英语设置的,我想我的Nexus5例外是用意大利语设置的。。我该怎么办?使用Locale.US而不是Locale.getDefault()你说得很对。。这是我们从中吸取的教训,这是一条伤脑筋的道路。