Seltsam Datum und Zeit Parsing Ergebnis mit Simple
-
29-09-2019 - |
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?
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.