Frage

ich ein seltsames Problem, wenn ein ISO8601 Datum und Uhrzeit mit Simple Parsen. Der entsprechende Code ist:

public class DateHelper
{
    private static SimpleDateFormat iso8601formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    public static Date parseISO8601(String date) throws ParseException
    {
        Date result = iso8601formatter.parse(date);
        return result;
    }
}

Für die Eingabe Ich bin es einen String geben

2010-09-06T15:30:00+02:00

Und als Rückkehr erhalte ich ein Date-Objekt mit Datum Satz 6. Januar 2010 mit der Zeit von 13.30 Uhr und Zeitzone GMT + 00:. 00

EDIT: Ich habe auch versucht, mit "2010-09-06T15: 30: 00 + 0200". Mit gleichen Ergebnissen

Sache Verwirrend ist, dass das Datum Satz teilweise richtig ist, nur der Monat falsch eingestellt ist.

Das Problem wird auf Android 1.6 gezeigt und Android 2.2.

Wie kann ich das Problem beheben?

War es hilfreich?

Lösung

Ihr Problem ist, reproduzierbares, wenn Sie mm für Monat statt MM verwenden.

Also ich, dass die Ursache des Problems vermuten ist, und dass Sie nicht die Version des Codes ausgeführt werden Sie denken, du läuft. Recompile und erneut auszuführen, den Code, wie Sie in Ihrer Frage haben. Es ist richtig.

Andere Tipps

Wahrscheinlich nicht Ihr Problem, aber da Simple ist nicht sicher fädeln müssen Sie Ihren Code ändern:

public class DateHelper
{
    public static Date parseISO8601(String date) throws ParseException
    {
        return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").parse(date);
    }
}

gehen Sie mit der ParseException? Der Code sollte einen ParseException für die Eingabezeichenfolge sein zu werfen.
Nicht sicher Android, aber mit Java 6 der Eingabestring 2010-09-06T15:30:00+02:00 ist ungültig.

+02:00 ist keine gültige Zeitzone.
Probieren Sie es ohne den Doppelpunkt:

    2010-09-06T15:30:00+0200  

A Trick (Test) ist die Dateformat zu verwenden, um ein Datum zu formatieren und überprüfen Sie die erstellte Zeichenfolge:

    System.out.println(iso8601formatter.format(new Date()));  

Ich habe ein 1.6-Projekt und der Code arbeitete für mich ...

public class DateHelper {
    private static SimpleDateFormat iso8601formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");

public static Date parseISO8601(String date) throws ParseException {
    Date result = iso8601formatter.parse(date);
    return result;
}

public static String makeISO8601String(Date date) {
    return iso8601formatter.format(date);
}

}

public class StackOverflowTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    TextView textView = (TextView)this.findViewById(R.id.textView);

    StringBuilder builder = new StringBuilder();
    try {
        String badDateString = "2010-09-06T15:30:00+0200";
        Date parsedDate = DateHelper.parseISO8601(badDateString);
        builder.append(badDateString).append("\n");
        builder.append(parsedDate.toString()).append("\n");
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    String dateString = DateHelper.makeISO8601String(new Date());
    builder.append("now="+dateString).append("\n");

    textView.setText(builder.toString());
}

}

Für mich ist es ausdruckt:

2010-09-06T15:30:00+0200
Mon Sep 06 06:30:00 PDT 2010
now=2010-11-06T14:41:55-077

Welche alle richtig für mich ist ...

für den ersten String-Parsing u verwenden sollten,

public static Date parseDateFromString(String aDateString){
    SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz");
    Date date=null;
    try {
        date= inputFormat.parse(aDateString);
    } catch (ParseException e) {
        return null;
    }
    return date;

, wenn die Zeitzone wie +02 Parsen: 00 ist es mit z statt Z. Hoffnung, es hilft. und das Problem mit dem Geben Sie +00: 00 Ich denke, mit den Lokalisierungs verbunden Sie verwenden. u sollte versuchen, es mit einem anderen Gebietsschema zu testen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top