LO BASIC IDE - DateAdd - Beispiel fehlerhaft

Hallo,

das Beispiel für "DateAdd" ist fehlerhaft.

Sub example_dateadd
     MsgBox DateAdd("m", 1, "1/31/2004") &" - "& DateAdd("m", 1, "1/31/2005")
End Sub

erzeugt die Fehlermeldung "Unzulässiger Wert oder Datentyp. Datentypen unverträglich.".

Gibt man für "1/31/2004" und "1/31/2005" die Funktion "Date" an ( MsgBox DateAdd("m", 1, Date) &" - "& DateAdd("m", 1, Date), funktioniert der Aufruf ("17.12.2017 - 17.12.2017").

"MsgBox(Date)" liefert "17.12.2017".

Somit kann man wohl sagen, dass das im Beispiel angegebene Datumsformat falsch ist. Anstatt "1/31/2004" bzw. "1/31/2005" muss man "31.01.2004" bzw. "31.01.2005" angeben:

Sub example_dateadd
     MsgBox DateAdd("m", 1, "31.01.2004") &" - "& DateAdd("m", 1, "31.01.2005")
End Sub

erzeugt die korrekte Ausgabe "29.02.2004 - 28.02.2005".

Vielleicht weiß ja jemand, wer für die deutsche "LO BASIC IDE Hilfe" zuständig ist und kann es vielleicht dorthin bitte zur Korrektur weiterleiten.

Grüße
Hans-Werner ;-))

Hi,

Ich kann das auch mit

Version: 5.4.3.2
Build ID: 92a7159f7e4af62137622921e809f8546db437e5
Threads CPU : 8; OS : Mac OS X 10.12.6; UI Render : par défaut;
Locale : fr-FR (fr_FR.UTF-8); Calc: group

nachvollziehen.

Vielleicht solltest du dafür ein Bug-Report öffnen.

Alex

Hallo Alex,

danke für Dein Feedback.

Ich denke, ein BUG-Report wäre da nicht richtig, "DateAdd" funktioniert ja, nur das angegebene Beispiel ist fehlerhaft. Bei anderen LO-Sprachvarianten kann das Beispiel ja richtig angegeben sein, was ich allerdings nicht verifizieren kann.

Grüße
Hans-Werner ;-))

------ Originalnachricht ------

Hallo Hans-Werner,

Ich habe auf einem LO (fr-FR) getestet, und die Hilfe darum ist die
gleiche wie die in der deutschen Verfassung, also besser wäre doch, dass
man ein Bug gegen die Online-Hilfe melden würde.

Ich konnte mit LO5432 kein sensibles Ergebnis erstellen, wenn ich die
doppelten Anführungszeichen stehen liess - ansonsten bekam ich noch
weitere Fehlermeldungen, abhängig von der Wahl der Separator (Punkt oder
Strich). Nach Entfernung der Anführungszeichen, bekam ich doch ein
MsgBox mit Datum, trotzdem aber mit falschem Jahr, also "31/01/32767".

Es ist da scheinbar was los. Ob das die Hilfe zu schulden ist, oder ein
unterliegendes Problem mit der Funktion DateAdd(), weiss ich nicht.

Alex

Wohl letzteres; 'DateAdd("m", 1, "4/5/6")' liefert das Datum
'04.06.2006', sprich es geht wohl von einem (nicht unbedingt sehr
üblichen) Format 'DD/MM/YYYY' aus, und nicht von dem zinmindest im
amerikanischen Sprachraum üblichen Format 'MM/DD/YYYY'.

Allerdings *gibt* es laut
https://en.wikipedia.org/wiki/Date_format_by_country auch das Format
'DD/MM/YYYY' (z. B. in Algerien), insofern ist die verwendete
Interpretation zwar unerwartet aber nicht grundsätzlich falsch.

Der Grund dafür dürfte IMHO sein, dass DateAdd keine Möglichkeit
erlaubt, ein Gebietsschema aus zu wählen, sondern fix auf das im BS
eingestellte Gebietsschema und die dort verwendete Reihenfolge von Tag,
Monat und Jahr zurückgreift, egal in welchem Format das Datum angegeben
wird. Und für DE ist das gültige Datumsformat nun mal 'DD.MM.YYYY' und
nicht 'MM/DD/YYYY'.

Man sollte also nicht nur das Beispiel in der Hilfe korrigieren, sondern
auch darauf hin weisen, dass bei Datumsangaben, die in einer Form
übergeben werden, die nicht dem Gebietsschema entspricht, unerwartete
Ergebnisse zu erwarten sind.

M. a. W. ist von der Verwendung dieser Funktion wohl eher ab zu raten.

Wolfgang

Hallo Alex und Wolfgang,

in der Hilfe zu "DateAdd" steht, dass die Variable "Datum" von Typ "Variant" sein kann, es ist also eine Datum-Integer-Zahl als auch eine Datum-Zeichenkette erlaubt. Aber Deine (Alex) Eingabe der Form 17.11.2017 ohne begrenzende " ist nicht erlaubt, denn diese Eingabe ist weder eine Zeichenkette noch eine gültige Zahl. Das nachfolgende Mini-Makro liefert sowohl für Datum-Integer-Zahl als auch Datum-Zeichenkette ein fehlerfreies Ergebnis:

Sub example_dateadd

Dim Date_1 as Variant
Dim Date_2 as Variant

Date_1 = "31.01.2004" ' Datumsformat entsprechend "Datumserkennungsmuster" in Abhängigkeit vom "Gebietsschema" angeben !
Date_2 = "31.01.2005" ' Datumsformat entsprechend "Datumserkennungsmuster" in Abhängigkeit vom "Gebietsschema" angeben !

MsgBox DateAdd("m",1,Date_1) & " - " & DateAdd("m",1,Date_2)

MsgBox DateAdd("m",1,DateValue(Date_1)) & " - " & DateAdd("m",1,DateValue(Date_2))

End Sub

Das sehe ich im Prinzip ebenso wie Du (Wolfgang). Für "DateValue" ist die Hilfe-Erläuterung etwas ausführlicher und bestätigt, was Du auch geschrieben hast:

"[...] Sie können das Gebietsschema, das in LibreOffice Basic zur Kontrolle der Formatierung von Zahlen, Daten und Währungen benutzt wird, im Menü unter Extras - Optionen... - Spracheinstellungen - Sprachen einstellen. In Basic Formatierungscodes wird immer der Dezimalpunkt (.) als Platzhalter für den Dezimaltrenner benutzt, der in Ihrem Gebietsschema definiert ist, und durch das entsprechende Zeichen ersetzt. Dies gilt entsprechend für das Gebietsschema für Datums-, Uhrzeit- und Währungsformate. Der Basic-Format-Code wird entsprechend Ihrer Gebietsschemaeinstellung ausgewertet und angezeigt. [...]"

Über [Extras] -> [Optionen] -> [Spracheinstellungen] -> [Sprachen] kann man das "Gebietsschema" einstellen und LO setzt dann automatisch das dazugehörige "Datumserkennungsmuster":

+ Gebietsschema: Englisch (USA)
+ Datumserkennungsmuster: M/D/Y;M/D
+ Date_1 = "1/31/2004" und Date_2 = "1/31/2005"

+ Gebietsschema: Englisch (Großbritannien)
+ Datumserkennungsmuster: D/M/Y;D/M;D-M
+ Date_1 = "31/1/2004" und Date_2 = "31/1/2005"

+ Gebietsschema: Afrikaans (Namibia)
+ Datumserkennungsmuster: Y/M/D;M/D
+ Date_1 = "2004/1/31" und Date_2 = "2005/1/31"

+ Gebietsschema: Bretonisch
+ Datumserkennungsmuster: D/M/Y;D/M;D.M.Y;D-M-Y
+ Date_1 = "31-01-2004" und Date_2 = "31-01-2005"

+ Gebietsschema: Deutsch (Deutschland)
+ Datumserkennungsmuster: D.M.Y;D.M.
+ Date_1 = "31.01.2004" und Date_2 = "31.01.2005"

Man muss dann nur (beispielsweise) in dem obigen Min-Makro die Datum-Zeichenkette-Angaben für "Date_1" und "Date_2" entsprechend anpassen, dann gibt es keine Fehlfunktionen von "DateAdd" mehr.

Von dieser Funktion abzuraten, so weit würde ich nicht gehen. Das Beispiel anpassen und/oder auf das "Datumserkennungsmuster" in den "Spracheinstellungen" hinweisen.

Grüße
Hans-Werner ;-))

------ Originalnachricht ------

Hallo zusammen,

ich habe heute früh nur die erste Mail lesen können, ohne etwas dazu schreiben zu können. Inzwischen hat sich ja schon herausgestellt, dass es wohl am Datumserkennungsmuster liegt, was sich noch nicht in der Dokumentation niedregeschlagen hat.
Ich hatte ein entsprechendes Problem für andere Datumsfunktionen als Bug gemeldet, siehe
https://bugs.documentfoundation.org/show_bug.cgi?id=106957
weil es ja kein Problem der deutschen Version, sondern ein grundsätzliches ist. Und eine Bug-Meldung ist dann die richtige Aktion, aber eben auf die Dokumentation bezogen.
Die Dokumentation wurde auch ziemlich schnell korrigiert, ich denke, das lag auch daran, dass ich eine neue Formulierung vorschlug, das würde ich hier auch empfehlen. Die Leute, die das ändern, sind wahrscheinlich sehr beschäftigt, man sollte es ihnen so klar und einfach wie möglich machen. Wenn sie sich erst in das Thema reindenken und gar nach einer Formulierung suchen müssen, bleibt das erst mal liegen und geht dann vergessen.

Gruß

Gerhard

Hallo, @all!

Ich hatte ein entsprechendes Problem für andere Datumsfunktionen als
Bug gemeldet, siehe https://bugs.documentfoundation.org/show_bug.cgi?id=106957 weil es ja
kein Problem der deutschen Version, sondern ein grundsätzliches ist.

So ist es auch in diesem Fall. Das Beispiel selbst ist nicht lokalisiert
und wir können in der deutschen Übersetzung daran nichts ändern.

Und eine Bug-Meldung ist dann die richtige Aktion, aber eben auf die
Dokumentation bezogen.

Auf jeden Fall, damit dort in Original entsprechend nachgebessert wird.
Vielleicht kann diese stelle an den anderen Bug angehängt werden?

Die Dokumentation wurde auch ziemlich schnell korrigiert, ich denke,
das lag auch daran, dass ich eine neue Formulierung vorschlug, das
würde ich hier auch empfehlen. Die Leute, die das ändern, sind
wahrscheinlich sehr beschäftigt, man sollte es ihnen so klar und
einfach wie möglich machen. Wenn sie sich erst in das Thema
reindenken und gar nach einer Formulierung suchen müssen, bleibt das
erst mal liegen und geht dann vergessen.

Zum einen ist mir dieser Threat aufgrund des Titels bisher nicht
aufgefallen (alle E-Mails lesen kostet einfach zu viel Zeit), erst jetzt
und durch Zufall. Zum anderen bin ich gerade bei der Übersetzung der
6.0, was für mich eindeutig Vorrang hat.

Deshalb, wie im anderen Fall, am besten eine fertige Ergänzung hier
vorschlagen, ich würde sie dann mit in die Übersetzung aufnehmen. Am
sinnvollsten ist die Ergänzung dann wahrscheinlich bei der Variable
"Datum" untergebracht.(?)

Gruß
Christian