12.07.2010, 23:37
Hallo,
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.
Das Problem ist, daß die Zeitstempel aus den Dateien mit der Default-Zeitzone geparst werden, d.h. hierzulande Europe/Berlin. Das stimmt aber nicht, da die Geräte (meins jedenfalls) die Zeit in UTC speichern, so wie sie im GPS-Signal enthalten ist. Kann sein, daß sich das beim Konvertieren ausgleicht, wenn beim Speichern die gleiche falsche Zeitzone verwendet wird, beim Parsen kommt jedenfalls nicht das richtige Ergebnis raus.
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. Als Workaround kann man zwar die Default-Zeitzone auf UTC setzen, aber das stört natürlich im Rest der Anwendung, und gemeinerweise kann man es nicht nur während des Parsens tun, da die DateFormat-Instanzen ja static sind.
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.
Das Problem ist, daß die Zeitstempel aus den Dateien mit der Default-Zeitzone geparst werden, d.h. hierzulande Europe/Berlin. Das stimmt aber nicht, da die Geräte (meins jedenfalls) die Zeit in UTC speichern, so wie sie im GPS-Signal enthalten ist. Kann sein, daß sich das beim Konvertieren ausgleicht, wenn beim Speichern die gleiche falsche Zeitzone verwendet wird, beim Parsen kommt jedenfalls nicht das richtige Ergebnis raus.
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. Als Workaround kann man zwar die Default-Zeitzone auf UTC setzen, aber das stört natürlich im Rest der Anwendung, und gemeinerweise kann man es nicht nur während des Parsens tun, da die DateFormat-Instanzen ja static sind.