Hallo,
folgendes Problem:
Die Variable datTempDate ist ein "Arbeitswert" in einer Funktion, dass den Ausgangswert aus einer Property bekommt.
Wenn ich nun das Datum bearbeite, wird ja auch das zugewiesene Datum geändert.
Wie setze ich elegant den temporären Wert, damit der Ausgangswert nicht geändert wird.
Dim datTempDate As NotesDateTime
Set datTempDate = StartDate
Call datTempDate.Adjustday(intActualDay, True)
VG, Michael
Nee, da diese Variante nen String erwartet. Ich kann DateOnly verwenden oder den String zusammenbasteln, aber dass is nicht so prall.
Property Set StartDate As NotesDateTime
Set Me.datStartDate = StartDate
End Property
Property Get StartDate As NotesDateTime
Set StartDate = Me.datStartDate
End Property
Wie setze ich elegant den temporären Wert, damit der Ausgangswert nicht geändert wird.
Dim datTempDate As NotesDateTime
Set datTempDate = StartDate
Call datTempDate.Adjustday(intActualDay, True)
VG, Michael
Da ich gerade genau das gleiche Problem habe: Wie könnte denn eine sichere Lösung aussehen?
Unter welchen Umständen kann
Dim datTempDate As NotesDateTime
Set datTempDate = New NotesDateTime(StartDate.LocalTime)
zu Problemen führen?
Gruß,
Gregor
Hm, interessantes Thema. Obwohl ich auch noch nicht den Sinn gefunden habe, mit NotesDateTime zu arbeiten, habe ich mal etwas experimentiert, wie man es hinbekommt, ein neues NotesDateTime auf Basis eines anderen zu kreieren, ohne die Zeit als String zu übergeben. Das ist dabei herausgekommen, geht bestimmt noch etwas eleganter, aber funktioniert. Wird einen Überlauf bei mehr als 32000 Tagen Differenz bringen, soll aber auch nur die Möglichkeit aufzeigen. Schick machen kann es sich derjenige, der sowas tatsächlich braucht.
Option Public
Option Declare
Sub Initialize
Dim StartDate As New NotesDateTime ("")
Call StartDate.SetNow ()
Call StartDate.AdjustDay (1)
Dim tmpDate As NotesDateTime
Set tmpDate = KloneDateTime (StartDate)
MsgBox StartDate.LocalTime, 64, tmpDate.LocalTime
Call tmpDate.AdjustDay (2)
MsgBox StartDate.LocalTime, 64, tmpDate.LocalTime
End Sub
Function KloneDateTime (dt As NotesDateTime) As NotesDateTime
Dim kdt As New NotesDateTime ("")
Call kdt.SetNow ()
Dim td As Double
Dim s As Integer
Dim m As Integer
Dim h As Integer
td = dt.TimeDifferenceDouble (kdt)
s = td Mod 60
Call kdt.AdjustSecond (s)
td = (td - s) / 60
m = td Mod 60
Call kdt.AdjustMinute (s)
td = (td - m) / 60
h = td Mod 60
Call kdt.AdjustHour (h)
td = td - h
Call kdt.AdjustDay (td / 24)
Set KloneDateTime = kdt
End Function
EDIT: Das wird so noch nicht ganz klappen. Wenn am Ende bei td / 24 etwas Krummes herauskommt, knallt es. Stecke da aber jetzt nicht mehr Energie rein, ist ja nur ein Denkanstoß ...
EDIT 2: Das passt auch an anderer Stelle noch nicht, irgendwo laufen die Minuten auseinander, wenn die Differenz unglücklich ist. Schluss jetzt damit, da müsste wohl mal ein Mathematiker ran ...
Ich mache es jetzt übrigens so:
Ich verwende den Code
Dim ndt As NotesDateTime
Dim ndt1 As NotesDateTime
[...]
Set ndt1 = New NotesDateTime( ndt.LSLocalTime )
Und da ich nicht weiß, ob das in irgendwelchen komischen Ausnahmefällen doch schief geht, frage anschließend sicherheitshalber noch die Zeitdifferenz
if ndt.Timedifference(ndt1) <> 0 then ...
ab und logge einen fatalen Error und breche das Programm ab, falls dieser Wert <> 0 sein sollte.
Gruß,
Gregor