Seite 1 von 1

Fehlerhafte Funktion DATUM

Verfasst: 19.09.2012, 00:00
von SpiRu
Laut Hilfe soll diese Funktion das aktuelle Datum im Format TT.MM.JJ zurückgeben.

Jedoch erhalte ich (heute am 2012-09-18) mit

Code: Alles auswählen

Z:= DATUM
als Ergebnis im Debugger
Z: 2012-018 [Zeichen],
wenn ich unter Windows als System-Datumsformat JJJJ-MM-TT eingestellt habe.

Die Funktion DATUM gibt das Datum also mitnichten immer im behaupteten Format aus. Was aber nicht so schlimm wäre, wenn es denn wenigsten im (eigentlich einzig vernünftigen, weil normal sortierfähigen) Format JJJJ-MM-TT ausgegeben würde. Aber das Format JJJJ-TTT ist ja wohl völliger Schwachsinn!

Re: Fehlerhafte Funktion DATUM

Verfasst: 19.09.2012, 20:03
von mikewolf99
Hallo SpiRu,

Probiers mal so :

Code: Alles auswählen

Date:=DATUM
Date ist ein Objekt vom Typ Zeichen
Anzahl Zeilen 0 Zeichen je Zeile 0
Ausführungsintervall bei Tageswechsel

mfg
mikewolf99

Re: Fehlerhafte Funktion DATUM

Verfasst: 20.09.2012, 15:23
von SpiRu
Ich habe das Problem mit der Funktion DATUM mittlerweile selbst mal genauer untersucht und folgendes festgestellt:
  • :-( Die Beschreibung in der Hilfe ist falsch (was den Typ von DATUM betriftt)
    :-( Die Beschreibung in der Hilfe ist falsch (was das Format betrifft)
    :-( Die Umwandlung in eines Wertes vom Typ [Datum] in eine [Zeichen]-Folge ist bedingt fehlerhaft

Die Funktion DATUM liefert das aktuelle Datum im internen Format. Das ist die Zeit in Tagen seit 1899-12-30 00:00:00. Wobei eine Stunde einem 1/24 Tag entspricht, eine Minute einem 1/60 davon etc. (Wie z.B. in Excel, wo allerdings die Bezugsbasis wohl eine andere ist.) Das externe Darstellungsformat als [Zeichen]-Folge, wie in der Hilfe unter DATUM absolut irreführend erwähnt, hat damit erst mal überhaupt gar nichts zu tun! Und ist im Übrigen vom eingestellten Windows System-Datumsformat abhängig.

Werte vom Typ [Datum], [Zeit] oder [Uhr] unterscheiden sich nicht in ihrer internen Darstellung (und sind daher auch zuweisungskompatibel).

Folgende lokalen Variablen seien in einem Objekt deklariert:
  • d [Datum]
    z [Zeit]
    u [Uhr]
    s [Zeichen]
Im Debugger erkennt man (in einem Beispiel) die unterschiedlichen Typen:
  • d: 2012-09-21 14:31:01 [Datum] (Zeit)
    z: 2012-09-21 14:31:01 [Zeit] (Zeit)
    u: 2012-09-21 14:31:01 [Uhr] (Zeit)
Wobei die für manchen ungewohnte (aber eigentlich einzig vernünftige) JJJJ-MM-TT HH:mm:ss Darstellung daran liegt, dass bei mir das System-Datumsformat in den Regions- und Sprachoptionen unter Windows so eingestellt ist.

Entscheidend ist der passende Variablentyp bei der Umwandlung in eine [Zeichen]folge:
  • s:= d (ergibt 2012-021)
    s:= z (ergibt 2012-09-21 14:31:01)
    s:= u (ergibt 14:31:01)
Bei eingestelltem System-Datumsformat TT.MM.JJ liefert die Zuweisung s:= d wohl das erwartete Ergebnis. Habe ich aber nicht nachgeprüft. Vermutlich ist die bei der internen Umwandlung benutzte Hilfs-Zeichenvariable nur 8 Zeichen lang, jedes längere System-Datumsformat liefert dann - wie hier - nur Schrott!


Appell an den Hersteller
  • 1. Die Hilfe bezüglich DATUM müsste dringendst berichtigt werden!
    2. Bei allen Punkten zu Zeitformaten müsste darauf hingewiesen werden, dass die Darstellung vom Windows System-Datumsformat abhängt!
    3. Die Unterschiede zwischen den Typen [Datum], [Zeit] oder [Uhr] müssten irgendwo erklärt werden. Insbesondere Anfänger bzw. Nicht-Programmierer blicken's sonst nicht, wozu man welchen Typ verwendet!
    4. Der "Sextaner"-Fehler in der Datumskonvertierung müsste beseitigt werden.

btw:
  • warum funktioniert
    hier eigentlich
    die Formatierung mit List= nicht?

Re: Fehlerhafte Funktion DATUM

Verfasst: 20.09.2012, 15:50
von SpiRu
mikewolf99 hat geschrieben:Probiers mal so :

Code: Alles auswählen

Date:=DATUM
Danke für die Mühe. Aber ich fände es gut, wenn hier alle ihre Tipps erst mal selbst ausprobieren, bevor sie das Forum mit unbrauchbaren Tipps verseuchen!

Warum's nicht geht, siehe meine eigene Antwort auf den ursprünglichen Beitrag.

Re: Fehlerhafte Funktion DATUM

Verfasst: 20.09.2012, 18:24
von Herbert_Testmann
SpiRu hat geschrieben:
mikewolf99 hat geschrieben:Probiers mal so :

Code: Alles auswählen

Date:=DATUM
Danke für die Mühe. Aber ich fände es gut, wenn hier alle ihre Tipps erst mal selbst ausprobieren, bevor sie das Forum mit unbrauchbaren Tipps verseuchen!

Warum's nicht geht, siehe meine eigene Antwort auf den ursprünglichen Beitrag.
Evtl. hat mikewolf ja nur nicht beachtet, dass Du die Version für FHZ hast. Ich hatte auch schon eine längere Antwort geschrieben und dann wieder gelöscht, denn in dem von uns verwendeten StudioCL für Homematic funktioniert "Datum" und die Übergabe in eine Zeichenkette.

Re: Fehlerhafte Funktion DATUM

Verfasst: 20.09.2012, 18:37
von Herbert_Testmann
SpiRu hat geschrieben: Appell an den Hersteller
  • 1. Die Hilfe bezüglich DATUM müsste dringendst berichtigt werden!
    2. Bei allen Punkten zu Zeitformaten müsste darauf hingewiesen werden, dass die Darstellung vom Windows System-Datumsformat abhängt!
    3. Die Unterschiede zwischen den Typen [Datum], [Zeit] oder [Uhr] müssten irgendwo erklärt werden. Insbesondere Anfänger bzw. Nicht-Programmierer blicken's sonst nicht, wozu man welchen Typ verwendet!
    4. Der "Sextaner"-Fehler in der Datumskonvertierung müsste beseitigt werden.
Wenn die Analyse so richtig ist, kann das für den Programmierer sicherlich hilfreich sein.
Es ist aber nicht möglich, _alle_ denkbaren Konfigurationen eines Anwendersystems zu testen, so dass solche Fehler, die nur unter bestimmten selten auftretenden Konfigurationen auftreten, immer wieder mal vorkommen.
Das könnte man in sachlicher Form dem Hersteller mitteilen.
Oder man verkauft seinen Kram bald wieder mit den entsprechenden Kommentaren zu schlechtem Support und unfreundlichen Telefongesprächen. Gab es hier ja auch schon.
Denn "der Ton macht die Musik".