Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Keydins am 12.02.15 - 09:25:48
-
Moin zusammen,
ich habe ein kleines Problem mit der Datumsformatierung bei der Datenversorgung einer Anwendung.
Die Anwendung wurde bis zum Jahreswechsel jeweils am ersten Arbeitstag des Monats mit Daten aus einer dbf-Datei aktualisiert. In den Datensätzen sind u.a. auch 2 Datumswerte enthalten, was aber nie zu Problemen führte.
Seit Febrauar werden die Importdaten als csv-Datei bereitgestellt und die Datumswerte in der csv haben nicht mehr den bisherigen typischen Aufbau
Tag.Monat.Jahr => 02.04.1935
sondern folgenden Aufbau
Jahr-Monat-Tag => 1935-04-02
Wenn ich die Werte aus der csv jetzt wie zuvor über den angepassten Importagenten in die entsprechenden Felder schreibe, passiert folgendes:
1935-01-21 wird zu 21.01.1935 (wie man es erwartet)
1935-01-11 wird zu 01.11.1935 (Tag und Monat werden vertauscht)
Bei allen Datumswerten, bei denen der Tag > 12 ist, ist alles in Ordnung. Bei allen anderen werden Tag und Monat vertauscht, was natürlich fatale Folgen bei der Nutzung der Anwendung mit sich bringt.
Ich suche jetzt nach einer verlässlichen Methode, mit der ich das gelieferte Datumsformat prüfen und so umwandeln kann, dass beim Schreiben in die jeweiligen Felder der korrekte Wert steht. Das Datenversorgungssystem kann ich leider nicht beinflussen.
Hat jemand ne Idee oder einen Ansatz für mich?
Gruß
Dirk
-
Wie wandelst Du denn jetzt den Wert um?
Unter der Annahme, dass der Import mittels eines Scriptagenten erfolgt, würde ich den Wert aus der csv-Datei "zu Fuß" formatieren, z.B. so
Dim datumtmp As Variant
datumtmp = Split ("1935-01-11", "-")
Dann hast Du ein Array mit drei Elementen
datumtmp (0) -> "1935" -> Jahr
datumtmp (1) -> "01" -> Monat
datumtmp (2) -> "11" -> Tag
Und daraus baust Du Dir das gewünschte Datum zusammen
-
Für den Import ist ein Scriptagent verantwortlich und wir nutzen für sollche Importe seit Jahren die Bibliotheken des dBase.Integrators, der Im- und ExportLibs für diverse Dateiformate zur Verfügung stellt.
Eine Umwandlung hatte ich bisher nicht für nötig gehalten, da nach der Umstellung des Agenten auf die Verarbeitung von csv-Dateien der Testimport keine 'offensichtlichen' Fehler hatte.
Die Befüllung der Notesdokumente erfolgt über die vorgegebenen Variablen aus der jeweiligen ScriptLib.
Alt: doc.datBeginnLZ = dbfContent(12)
Neu: doc.datBeginnLZ = csvContent(12)
Die fehlerhafte Interpretation des Datums durch Notes ist nur zufällig aufgefallen, weil sich ein Mitarbeiter einen Termin für ein Abstimmungsmeeting zu einer Fälligkeit in seinen Kalender eingetragen hatte und sich dann gewundert hat, dass die Fälligkeit in der Anwendung nicht auf den 11.02.2015 sondern auf den 02.11.2015 lautete.
Vermutlich komme ich wohl nicht darum herum, in einem Konfigurationsdokument zu hinterlegen, in welchem Format das Datum erwartet wird, so dass ich dann im Agenten den Import abbrechen kann, falls ein anderes Format in der Datei geliefert wird.
Mal schaun, ob ich das mit dem Split kombinieren kann, so das man das Format nach Möglichkeit ohne einen Eingriff in den Agentencode bei Bedarf anpassen kann.
Auf jeden Fall brauche ich eine Prüfroutine, die eine unangekündigte Formatänderung erkennen kann.