13.07.2010, 07:30
(12.07.2010, 23:37)brazzy Wrote: Ich bin grade dabei, RouteConverter zum Parsen von GPS-Logdateien in meine Anwendung einzubinden und glaube (auch nach Lektüre des Quelltextes), auf einen ziemlich gravierenden Bug gestoßen zu sein, zumindest beim Lesen von NMEA-Dateien, aber vermutlich auch bei einigen anderen Formaten. Es kommt mir aber etwas seltsam vor, daß das noch niemand bemerkt hat, vielleicht übersehe ich auch was.
Nachdem es so viele Nutzer gibt, vermute ich auch, daß Du etwas übersiehst.
(12.07.2010, 23:37)brazzy Wrote: Das Problem ist, daß die Zeitstempel aus den Dateien mit der Default-Zeitzone geparst werden, d.h. hierzulande Europe/Berlin.
Woraus schließt Du das?
(12.07.2010, 23:37)brazzy Wrote: Zur Behebung müßte im Code bei jeder Verwendung von Calendar.getInstance(), new SimpleDateFormat() und ähnlichem explizit die Zeitzone gesetzt werden, entweder UTC oder (falls es sowas gibt) die in der Datei angegebene.
Bei NMEA z.B. wird der CompactCalendar verwendet:
public class CompactCalendar {
public static final TimeZone GMT = TimeZone.getTimeZone("GMT");
private final long timeInMillis;
private final String timeZoneId;
public static CompactCalendar fromCalendar(Calendar calendar) {
return new CompactCalendar(calendar.getTimeInMillis(), calendar.getTimeZone().getID());
}
public static CompactCalendar getInstance() {
return fromCalendar(Calendar.getInstance());
}
private CompactCalendar(long timeInMillis, String timeZoneId) {
this.timeInMillis = timeInMillis;
this.timeZoneId = timeZoneId.equals("GMT") ? "GMT" : timeZoneId.intern();
}
public long getTimeInMillis() {
return timeInMillis;
}
public String getTimeZoneId() {
return timeZoneId;
}
public Calendar getCalendar() {
Calendar result = Calendar.getInstance(getTimeZone());
result.setTimeInMillis(getTimeInMillis());
return result;
}
Du siehst: viel Gehampelt mit Zeitzonen.
Schau mal in den Code und schreib einen Test wie in TimeZoneTest, der zeigt, wo das Problem liegt.
--
Christian
Christian
