Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Manfred Dillmann am 01.12.05 - 09:58:55
-
Hallo zusammen,
in einem Dokument befinden sich 2 Date/Time Felder mit einer Datumsangabe (StartDate, EndDate).
Via LotusScript soll im Backend quasi die Funktion:
@TextToTime(@Explode(
@TextToTime( @Text(StartDate) + " - " + @Text(EndDate) )
))
"nachgebaut" werden, ein resultierenden Feld (z.B. DateRange) also jeden einzelnen Tag von StartDate bis EndDate enthalten.
Ich generiere also die einzelnen Werte, schreibe diese in ein Array (als Variant, resultierend aus NotesDateTime.LSLocalTime) und weise das Array dem resultierenden Feld zu.
Leider ist (egal was ich auch versucht habe) IMMER die Zeitkomponente mit im Feld gespeichert, was ich nicht gebrauchen kann, z.B.
12.12.2005 00:00:00 CET
13.12.2005 00:00:00 CET
14.12.2005 00:00:00 CET
Die Formelsprache-Variante macht das nicht.
Kennt da jemand einen Trick?
Gruß
Manfred
*EDIT* Status auf "Daumen hoch" gesetzt.
-
LS setzt immer auch die Zeitkomponente, wobei diese aber eigentlich sowieso immer mit dabei ist: Letztendlich ist jeder DT-Wert eine reelle Zahl.
Was stört Dich denn an 0 Uhr ? Für's Rechnen ist es egal (bzw. korrekt), für die Anzeige lässt es sich wieder verstecken.
Bernhard
-
Mittels Evaluate sollte das gehen
ret = Evaluate( |FIELD CalendarDateTime := @Date(CalendarDateTime);@True|, doc )
Andreas
-
LS setzt immer auch die Zeitkomponente, wobei diese aber eigentlich sowieso immer mit dabei ist: Letztendlich ist jeder DT-Wert eine reelle Zahl.
Was stört Dich denn an 0 Uhr ? Für's Rechnen ist es egal (bzw. korrekt), für die Anzeige lässt es sich wieder verstecken.
Bernhard
der Zeit- oder Datumsteil eines Feldes kann auch mit LS weggelassen werden. In NotesDateTime gibt es SetAnyTime und SetAnyDate, damit fehlen dann die Zeit /Datumsangaben und werden auch nicht mehr in ein Feld geschrieben.
Gruß
Dirk
-
@Andreas:
Ja, Evaluate geht, aber ich wollte das doch LS-only lösen... :-)
@Bernhard:
Für die Anzeige kann ich das wieder hinbiegen, klar (z.B. in einer Ansichtenspalte mit @Date). Beim Rechnen mit 00:00 Uhr ist das IMHO nicht so ohne.
Erninnerst Du Dich noch an den Bug in einer älteren Notes-Version, wo plötzlich nach der Umstellung auf Sommerzeit/Winterzeit die Termine um einen Tag verschoben angezeigt wurden? Habe mir das damals im Design angeschaut, man hatte 00:01 als Uhrzeit gewählt und je nach dem wie umgestellt wurde, ist ein solcher Termin über die Mitternachtsgrenze "gerutscht".
Für die Anzeige ändern geht - aber dann brauche ich immer wieder zusätzlich z.B. @Date - wollte ich mir sparen.
Für Singe-Value-Fields habe ich es ja auch hinbekommen, geht prima:
Nach der Zuweisung des Wertes zum Feld kann man die Zeitkomponente mit
Call NotesItem.DateTimeValue.SetAnyTime
killen. Nur leider nicht, wenn das Feld Multivalue sein soll.
Gruß
Manfred
-
Hallo Dirk,
da warst Du ja noch schneller als ich (SetAnyTime).
Wie soll das mit einem Multi-Value-Feld funktionieren?
Gruß
Manfred
-
Indem Du einen Array auf diese weise mit Date-Only werten baust und den dann in das Feld schreibst?
-
habs noch nicht versucht, aber ich würde versuchen das Array anders zu füllen.
Für die einzelnen Datumswerte einem NotesDateTime-Object erstellen, dann mit SetAnyTime die Zeiten verwerfen und dann mit Array(i) = NotesDateTime(LSLocalTime) den Datumswert ins Array schreiben. Das Array dann dem Feld übergeben.
-
@Gandhi und @Dirk:
Alles schon probiert, hat nicht funktioniert. Offensichtlich wird immer in dem Moment, wo das Array dem Feld zugewiesen wird, die Zeitkomponente angehängt (Auch wenn laut Debugger in den einzelnen Array-Werten keine Zeitkomponente enthalten ist).
Und nu? ;-)
Manfred
-
was macht ein ComputeWithForm?, löscht der eventuell die Zeiten raus?
-
>>was macht ein ComputeWithForm?, löscht der eventuell die Zeiten raus?<<
Wird wahrscheinlich funktionieren (nicht probiert). Ist aber wie auch Evaluate so ein wenig von hinten in die Brust.
Wenns aber einfach nicht direkt via LS geht, bleibt einem ja nichts übrig.
Ich dachte, dass da ggf. jemand einen einfachen LS-native Trick kennt...
Manfred
-
Wie hast du das Array übergeben?
Probiers eventuell mal über NotesItem.Values.
Glaube zwar nicht, dass es funktioniert, aber ein Versuch wäre es noch wert.
-
>>Glaube zwar nicht, dass es funktioniert, aber ein Versuch wäre es noch wert.<<
Ich hatte verschiedene Arten der Zuweisung ausprobiert - ob die von Dir genannte dabei war, weiss ich nicht mehr sicher. Probiere ich bei Gelegenheit noch mal aus...
Noch mal danke an alle für die Antworten!
Gruß
Manfred
-
Ich weiss ja nicht, für welche Anwendung Du das brauchst, aber wenn Probleme
wie Zeitverschiebung auftauchen können, würde ich ausschliesslich Zeitdifferenzen
zu einem Referenzdatum verwenden.
Hatte ähnliche Probleme sowohl mit .lslocaltime wie auch .dateonly, etc. wenn z.B.
unterschiedliche Clients mit unterschiedlichen Zeitzonen an ein und demselben
Dokument arbeiten.
Hab dann einfach nicht mehr das Datum als Date gespeichert sondern als Zeitdifferenz
(Long). Bei der Weiterverarbeitung dann normal mit New Notesdatetime+adjust. Ist halt
zeitaufwändig bei Ausgabe der Werte in Ansichten, aber es kommt halt immer auf
die Anwendung an, die man gerade macht.
bye
Christian
-
Christian,
danke für Deinen Hinweis. Mir ist durchaus bewusst, dass es mit Datum/Zeit immer wieder Probleme gibt - und das nicht nur auf DST bezogen.
Ganz schlimm wird es, wenn man (z.B. aus einem RSS-Feed) eine Zeitinformation als "String" erhält und diese dann von NotesClients mit unterschiedlichen Ländersettings in DateTimeValue Fields schreiben lässt... zum Glück gibt es International nicht soooo viele Formate, aber in LS muss man da trotzdem aufpassen.
Manfred