catdoc/xls2csv schreibt falsches Datum

27/12/2008 - 15:00 von Christian Gramsch | Report spam
Hallo,

seit geraumer Zeit, etwa zwei Jahren, làuft auf einem Webserver
allwöchentlich ein Skript, dass in einer Excel-Tabelle hinterlegte Termine
zunàcht in eine csv-Datei schreibt, die dann von dort in eine
MySQL-Datenbank importiert werden. Das hat bisher tadellos geklappt.

Dazu nutze ich das Tool xls2csv aus der catdoc-Sammlung.

Seit heute, evtl. auch schon seit ein paar Tagen, spinnt dieses Tool - Daten
werden um genau vier Jahre und einen Tag in die Zukunft gesetzt, auch bei
einem einfachen Aufruf ohne jeden Parameter.

Ich habe dann das Debian-Paket runtergeschmissen und das Stück Software
selbst kompiliert, was keine Änderung brachte.

Selbst mit den selben Daten, mit denen das Skript vor eine Woche noch
tadellose Ergebnisse erzeugte, tritt das Problem auf.

Auf meiner Workstation habe ich das dann auch noch installiert (das
Debian-Paket) und dasselbe festgestellt.

Ich hab' mir den Quellcode kurz angesehen, aber meine rudimentàren
Programmierkentnisse reichen nicht aus, um da irgendwo einen Bug
auszumachen.

Das Problem ist, das die Software wohl schon lange nicht weiterentwickelt
wird, die aktuellste Version ist von 2005.

Ältere Versionen, bei denen das Problem eventuell nicht auftreten könnte,
sind auf der Seite des Entwicklers nicht mehr verfügbar.

Auf einer Bezahlseite habe ich immerhin jemanden gefunden, der Anfang 2008
mit der (gleichen) DOS-Version dasselbe Problem festgestellt hat.




Weiß jemand, wo hier der Hund begraben liegt?
Wieso so plötzlich, ohne jede Änderung an den zu importierenden Daten, dem
Skript, dem Programm?
Wieso zum Teufel genau 4 Jahre + 1 Tag (Vielleicht ein X-Post nach das.Vau
wert - ich mein' ungefàhr vier Jahre und einen Tag vor dem 21.12.2012 wird
das Datum um genau den Zeitraum vorgestellt...;)?

Oder kennt jemand eine Alternative? Sie sollte Office-2003-Excel-Tabellen
auf der Konsole ausgeben können, dabei sollte idealerweise die Ausgabe des
Datums definierbar sein, wobei ich das auch ins Importskript integrieren
könnte.



Naja danke für eure Bemühungen schonmal im Vorraus, genießt die Zeit
zwischen den Jahren :)

Gruß
Christian
 

Lesen sie die antworten

#1 Christian Gramsch
27/12/2008 - 16:16 | Warnen spam
Christian Gramsch wrote:

Weiß jemand, wo hier der Hund begraben liegt?



Soviel habe ich jetzt rausgefunden:

In der Datei xlsparse.c, die für die Ausgabe der xls-Daten verantwortlich
ist, scheint diese Anweisung für die Dateien neuerdings zuzutreffen:

case MS1904: /* Macintosh 1904 date system */
date_shift$107.0;
break;

Ohne das date_shift neu gesetzt wird (ist ansonsten bis dahin 25569) bekomme
ich die richtigen Daten (Das ist jeweils die Differenz von 1970 bis 1904
bzw. 1900. Excel rechnet nàmlich von Version zu Version mal ab 1900, mal ab
1904, und xls2csv stutzt das erstmal auf 1970 zurecht)

Wieso so plötzlich, ohne jede Änderung an den zu importierenden Daten, dem
Skript, dem Programm?



Das bleibt mir ein Ràtsel. Wieso hàlt dieses Programm die selben Dateien auf
einmal für Dateien mit einer anderen Zeitrechnung als noch vor einer Woche?

Wieso zum Teufel genau 4 Jahre + 1 Tag (Vielleicht ein X-Post nach das.Vau
wert - ich mein' ungefàhr vier Jahre und einen Tag vor dem 21.12.2012 wird
das Datum um genau den Zeitraum vorgestellt...;)?



Dafür hat sich das wiederum geklàrt, bedingt dadurch, dass die
Excel-Zeitrechnung teils 1900, teils 1904 beginnt, muss hier getrickst
werden. Der eine Tag kommt noch wegen des Schaltjahres 2010 dazu. Glück
gehabt, doch kein Vorbote der Maya-Invasion ;)

Gruß
Christian

Ähnliche fragen