Hallo in die Runde.
Ich nutze folgenden Code:
d=New Date
lokal=“DEC 1852”
thetruebool=ParseDate(lokal,d)
If theTrueBool then
MsgBox d.LongDate
End
Unter Windows und Mac OS ist thetruebool fase. Das erwarte ich auch so. Unter (Mint-)Linux ist es true und das Datum ist auf “Mittwoch, Dezember 18, 2052” eingestellt.
Ist das ein Denkfehler meinerseits oder sollte ich das als Fehler melden?
Hat jemand einen Workarround dafür?
Gruß, Stefan Mettenbrink.
Es ist eher zufllig, da das geklappt hat. “DEC 1852” ist kein vollstndiges Datum. Wenn Du ein spezielles Datumsformat hat, ist es - meines Erachtens - immer besser, da selbst zu parsen.
Ich dachte, genau für diesen Zweck ist ParseDate. Damit ich nicht jeden String selbst auf ein korrektes Datumsformat prüfen muss.
Mir geht es eher nicht darum, dass ich Date mit einem vorgegebenem Datum füttern möchte sondern darum, zu klären, ob der vorgegebene Stein ein korrektes und vollständiges (Kalender-) Datum enthält. In diesem Fall hätte ich erwartet, dass Xojo false liefert, weil das Datum unvollständig ist. Genau so verhält sich Xojo unter Windows und Mac OS.
Anders gefragt: Warum bekomme ich unter Linux von ParseDate ein anderes Ergebnis als unter Mac OS und Windows?
BTW, mit REALstudio auf Windows funktionierte ParseDate mit Datumsangaben vor 1600 nicht. Hat sich daran etwas geändert?
Gruß, Stefan Mettenbrink.
ParseDate ist für vollständige Datums-Daten des jeweiligen OS und verwendet die Routinen, die das OS dafür bereitstellt. Daher die unterschiedlichen Ergebnisse. Und wenn die Datums-Daten nicht von einem User kommen, ist ParseDate nicht für diese Aufgabe geeignet.
OK, dann habe ich das immer falsch verwendet. Ich bin davon ausgegangen, dass hier eine Datumsprüfung erfolgt (z. B. Gültigkeitsprüfung von Schalttagen).
Aber die Dokumentation ist hier eindeutig:
The Text parameter must be a valid string representation of a date.
Danke für die Klärung.
ist zwar nicht Deine Frage, aber ich habe auch Probleme mit Date in Linux
LongDate wird von Xojo immer falsch dargestellt (in allen anderen Programmen wird es richtig dargestellt)
dim d as new date
MsgBox d.LongDate
ergibt
Sonntag, Juli 31, 2016
so habe ich eine Methode erstellt um es umzuwandeln
[code]Function ConvertLongDate(all as String) As String
dim month, day, dayname, year as string
dayname = NthField(all, “,”, 1)
month = NthField(all, ", ", 2)
month = NthField(month, " ", 1)
day = NthField(all, ", ", 2)
day = NthField(day, " ", 2)
day = NthField(day, “.”, 1)
if left(day, 1) = “0” then day = right(day, 1)
year = right(all, 4)
return dayname + ", " + day + ". " + month + " " + year
End Function[/code]
dim d as new date
MsgBox ConvertLongDate(d.LongDate)
ergibt dann
Sonntag, 31. Juli 2016