Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: TMC am 31.10.04 - 21:36:56
-
Ich extrahiere aus einem String ein Teilstring.
Dieses Teilstring ist wie folgt aufgebaut:
_Teilstring := "31.10.2004 16:25:16".
Quelle für dieses String ist folgendes LS: Format$(Now, "dd.mm.yyyy hh:mm:ss").
Dieser Aufbau ist 100% verlässlich.
@Date gibt ja nur ein Datum zurück, @Time nur die Uhrzeit.
Ich muss jetzt dieses Teilstring 100% zuverlässig in ein Datum+Zeit umwandeln in Formelsprache. Ziel ist die Anzeige in einer View.
Wie bekomme ich trotzdem 100% verlässlich dieses String in die View?
@TextToTime traue ich da nicht, was ist wenn es ein 10.10.2004 ist?
Via @Middle(....) kann ich die Werte des Strings sauber auslesen.
Wie kann ich diese wieder zusammensetzen? Das Ergebnis soll 1 Spalte sein (nicht 2) und sortierbar sein etc.
-
Matthias, ich möchte gerne helfen. Ich habe gerade eine grössere Fremdapplikation geradeziehen müssen, die sich um Datumsformate keinerlei (ernsthafte) Gedanken gemacht hat.
Ich habe aber noch ein paar Fragen:
1) Warum wird der DateTime-Wert nicht entsprechend abgespeichert ? Warum wird hier über ein Textfeld gearbeitet, wenn man dann doch wieder Date/Time haben will ?
2) Du vertraust Format$ "zu 100%". Das halte ich für gewagt.
3) Warum vertraust Du dann nicht nicht @TextToTime ?
4) Was meinst Du mit dem 10.10.2004 ?
Bernhard
-
Hi Bernhard,
1) Warum wird der DateTime-Wert nicht entsprechend abgespeichert ? Warum wird hier über ein Textfeld gearbeitet, wenn man dann doch wieder Date/Time haben will ?
Es ist eine bestehende App mit einigen Doks. Es wird 1 Textfeld geschrieben mit mehreren Dingen (Username, Datum etc.).
Das Datum setzt sich so zusammen: Format$(Now, "dd.mm.yyyy hh:mm:ss"). Mittelfristig (ab nächstes Jahr) stehen größere Änderungen in der DB an. Dabei werde ich dann hier mit einzelnen Feldern arbeiten. Steht schon auf der ToDo-Liste :-)
2) Du vertraust Format$ "zu 100%". Das halte ich für gewagt.
Wirklich? Ich dachte, wenn "dd.mm.yyyy hh:mm:ss" vorgegeben wird, dass dies dann in dieser Reihenfolge aufgebaut wird - und ein Ergebnis à la mm.dd.yyyy somit ausgeschlossen werden kann.
3) Warum vertraust Du dann nicht nicht @TextToTime ?
Ich weiß nicht 100% wie das intern arbeitet. Ergibt @TextToTime(01.10.2004 05:05:05) immer den 1. Oktober? Kann da nicht auch der 10. Januar rauskommen?
4) Was meinst Du mit dem 10.10.2004 ?
Sorry, das war ein Tippfehler ;) Sollte 01.10.2004 sein (siehe Antwort auf Frage 3).
Danke!
Matthias
-
Wie ein Date/Time Wert interpretiert wird, hängt von der BS Einstellung ab, die zur Laufzeit gilt.
D.h.
ein @TextToTime(01.10.2004 05:05:05) kann beides ergeben: 1. Oktober oder 10. Januar.
Effekte gibt es oft, wenn sowas in servergestützten Agenten oder Ansichten verwendet wird und der Server eine andere BS Einstellung hat.
Andreas
-
Wenn Du wirklich sicher Deinen Datumsstring aufbauen kannst (mir ist noch nicht ganz klar, wie dort die Eingabe erfolgt), dann kannst Du @Date mit @Adjust verknüpfen:
datetimevar := @Adjust (@Date (YYYY; MM; DD); hh; mm; ss)
So bist Du auf jeden Fall unabhängig vom BS.
Bernhard
-
Ah, ok, danke Bernhard !
Werde das gleich mal ausführlich testen.
mir ist noch nicht ganz klar, wie dort die Eingabe erfolgt
Die "Eingabe" erfolgt über eine LotusScript-Function, ausgelöst von User (Workflow-Buthong).
Dabei wird eben ein String zusammengestellt, Auszug:
session.Username & "###" & Format$(Now, "dd.mm.yyyy hh:mm:ss") & "###" & docThis.Status(0)
Wie Du schon angedeutet hast oben: Das schreit danach, diese Werte besser in einzelne Felder zu schreiben, zumal z.B. Status auch zusätzlich noch geschrieben wird :P
-
So ein Blödsinn, was ich da geschrieben habe ! Es reicht doch einfach
@Date (YYYY; MM; DD; hh; mm; ss)
statt der kruden Konstruktion ...
Auf jeden Fall wäre es aber besser, Datums-/Zeitwerte von Beginn an gesondert zu erfassen. Wenn Du die Chance dazu noch hast, würde ich nicht länger überlegen.
Bernhard
-
Sicher Bernhard?
In der Help steht nämlich "Rückgabe ohne Zeitkomponenten":
@Date
Konvertiert die Zahlen für die verschiedenen Komponenten eines Zeit- und Datumswerts in den Zeit- und Datumswert.
Rückgabewert
ZeitDatumGekürzt
Zeit und Datum. Das den an @Date übergebenen Parametern entsprechende Datum ohne Zeitkomponenten.
Dies war der eigentliche Grund meiner Frage.
Aber ich teste das jetzt mal.
-
Statt @Date könnte man auch @Time nehmen. Und da ist auch der Text der Hilfe zielweisender:
Zeit und Datum. Die der an @Time übergebenen Parametern entsprechende Uhrzeit ohne Datumskomponenten, falls der Parameter vom Typ ZeitDatum ist.
Aber funktionieren tut's auch bei @Date ;)
Bernhard
-
Seltsam,
_Date := @Date(2004; 11; 1; 12; 1; 18);
@Prompt([OK]; "Test"; @Text(_Date))
Gibt in der Msgbox Datum + Uhrzeit aus: 01.11.2004 12:01:18.
Stimmt wohl die Designerhilfe nicht ganz.
Auch dier 6.5er Designerhilfe schreibt zu @Date:
Return value
truncatedTimeDate
Time-date. The date corresponding to the parameters that you sent to @Date, minus any time components.
Man beachte das "minus any time components.".
Wie auch immer, so gehts jedenfalls (auch in ND6) :)
Danke nochmal.
Matthias
-
Wie gesagt - siehe die korrektere Aussage zu @Time.
d_ := @Date (2004; 11; 1; 12; 27; 00)
@Text (d_)
ergibt "1.11.2004 12:27:00"
Jedoch ergibt (in Ergänzung zu oben)
@Text (@Date (d_))
"1.11.2004"
Es kommt also auf die Parameter an.
Bernhard