Hallo,
ich habe hier das komische Verhalten, dass Notes 31.05.2007 00:00 Uhr als Ergebnis liefert und nicht 01.06.2007 00:00 Uhr.
Dim ndt As New NotesDateTime("01.05.2007 00:00")
Call ndt.AdjustMonth(1)
Msgbox ndt.LSLocalTime
Selbst wenn ich das folgend abändere, erhalte ich immernoch den letzten Tag des Mais als Ergebnis:
Dim ndt As New NotesDateTime("01.05.2007 00:59")
Kann sich das jemand erklären?! Ist das normal? Wie kann ich dieses Verhalten umgehen?!
Liebe Grüße
Giordano
Könnte Dir dieser aktuelle Thread aus dem DominForum (http://www.dominoforum.de/modules/newbb/viewtopic.php?topic_id=21775&forum=55) helfen?
Die NotesDateTime-Klasse ist eh meist überbewertet bzw. unnötig. Du kannst auch simpel mit der Datumsseriennummer rechnen:
Dim vStart As Variant
vStart = Datenumber (2010, 12, 1)
Messagebox Datenumber (Year (vStart), Month (vStart) + 1, 1)
Du siehst, das funktioniert sogar im Dezember ;)
Bernhard
Hallo Bernhard
Du siehst, das funktioniert sogar im Dezember
Nimmst Du das nur hin, frei nach dem Motto: "Probieren geht über Studieren", oder weißt Du, warum das funktioniert?
Eigentlich dürfte das doch gar nicht funktionieren ???
Egal (für mich) ob ich jetzt von links nach rechts oder von rechts nach links die Ausdrücke auflöse, dürften die Ausdrücke Year ... und Month nichts von einander wissen; und der Wert vStart wird ja gar nicht erhöht, sondern nur temporär bei der Auswertung des Ausdrucks Month, und warum weiß Year davon ...
Selbst wenn ich die "Klammer"regel anwende, fände ich es unlogisch. Da es funktioniert (habe es ausprobiert, weil ich es nicht glauben konnte), kann es ja nur bedeuten, dass innerhalb der Klammer von Datenumber von rechts nach links aufgelöst, aber der temporäre Wert vStart die ganze Zeit beigehalten wird.
Komme darauf, weil
Dim vStart As Variant
vStart = Datenumber (2010, 12, 1)
Messagebox Datenumber (Year (vStart)+2, Month (vStart) + 1, 1)
das Datum 1.1.2013 auswirft O0
Also, wenn Du mir einen Tipp geben könntest, welche Regel hier greift, dann könnte ich meine Neugierde befriedigen ....
Danke
Markus
OK, ich sehe gerade, dass Variant-DateTime seine eigenen Probleme mitbringt...
Dim vExpectedNDT As Variant
vExpectedNDT = DateNumber( 2007, 1, 31)
vExpectedNDT = DateNumber( Year(vExpectedNDT), Month(vExpectedNDT) + 1, 31)
Print vExpectedNDT
Wenn ich den 31.01.2007 um einen Monat verschiebe, erhalte ich mit Variant-DateTime 03.03.2007 und mit NotesDateTime 28.02.2007 als Ergebnis. NotesDateTime erscheint mit hier korrekter. Wie soll ich damit umgehen?!
EDIT:
Übrigens funktioniert folgender Code wunderbar, wenn man bei adjustMonth den Parameter True mitgibt:
Dim ndt As New NotesDateTime("01.05.2007 00:00")
Call ndt.AdjustMonth(1, True)
Msgbox ndt.LSLocalTime
Falsche Herangehensweise - immer an die Zahl als Datum denken!
ExpectedNDT = DateNumber( Year(vExpectedNDT), Month(vExpectedNDT) + 2, 1) - 1
Bernhard
Danke, für deine Antwort, aber das ist leider eine Einzelfallbehandlung.
Wie würdest du das hier anwenden?!
For iMonth = 1 To 12
For iDay = 1 To 31
vExpectedNDT = DateNumber( 2007, iMonth, iDay)
vExpectedNDT = DateNumber( Year(vExpectedNDT), Month(vExpectedNDT) + 1, iDay) + TimeNumber(00, 59, 00)
Print vExpectedNDT
Next
Next