2008 ist ja wieder einmal ein Schaltjahr. Um das zu überprüfen, habe ich eine kleine Funktion zusammengebaut:
Function IsLeapYear ( y As Integer ) As Boolean
IsLeapYear = True
Set dt = New NotesDateTime( Datenumber( y ,3, 1) )
Call dt.AdjustDay (-1)
If Not Day (dt.DateOnly) = 29 Then
IsLeapYear = False
End If
End Function
Die Funktion erstellt ein Notes DateTime object und setzt das Datum auf den 1.3. des Jahres, das als Parameter übergeben wird. Danach zieht es von diesem Datum 1 Tag ab, um auf den letzten Tag des Monats Februar zu gelangen.
Ist der Wert des Tages 29, dann ist es ein Schaltjahr, sonst nicht.
Ich habe dann mal ein wenig mit der Funktion rumgespielt und habe mal die Zahl 1700 eingegeben. WUMMS ... Fehlermeldung.
1699 und 1701 sind kein Problem, aber das Jahr 1700 ...
In einer Schleife habe ich dann die Jahreszahlen 1 bis 9999 an die Funktion übergeben. Insgesamt erhalte ich 6 mal die gleiche Fehlermeldung wie beim Jahr 1700.
1700, 1500, 1400, 1300, 1100 und 1000
Nicht, daß da irgendwie ein Bug in Notes ist ;D
Naja, das mit den "Konvertierungen zwischen LS und Formelsprache" würde ich jetzt nichts so sehen.
Beide Sprachvarianten greifen ja auf die Notes-API zurück, aber die NotesDateTime class ist einfach ... komisch.
Deine Beobachtungen im Debugger weisen daher genau auf den Kern.
Mehr dazu auf dem EntwicklerCamp. Und ich brauche die Klasse de facto überhaupt nicht.
Ich greife jetzt mal dem EntwicklerCamp voraus. Wenn wir auf die NotesDateTime class verzichten, dann sieht der Code so aus:
Sub Click (Source As Button)
Dim iYear As Integer
Dim vDate As Variant
On Error Goto ErrorRoutine
iYear = 1700
vDate = Datenumber (iYear, 3, 1)
vDate = vDate - 1
If Day (vDate) = 29 Then
Print "Schaltjahr: " & Cstr (iYear)
Else
Print "KEIN Schaltjahr: " & Cstr (iYear)
End If
Exit Sub
ErrorRoutine:
Call ErrorHandler ("Button")
Exit Sub
End Sub
Und schon klappt es mit dem Nachbarn. ;)
Ich tippe: Der Wrapper für die Klasse (und für @functions, aber das habe ich selbst noch nicht getestet - das hat ja Carsten schon gemacht - DANKE!) hat einen Schuss.
Bernhard
PS: Ich habe diese Tests übrigens zuerst unter Notes R5.0.8 gemacht. Das Thema ist also nicht neu ;D