Autor Thema: NotesDateTime und TimeDifferenceDouble  (Gelesen 2727 mal)

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
NotesDateTime und TimeDifferenceDouble
« am: 15.06.05 - 09:17:39 »
Hallo zusammen,

ich habe folgendes Problem: ich vergleiche 2 Datums, die als NotesDateTime deklariert sind.

Code

If eDatum.TimeDifferenceDouble(oldBegin) = 0 Then
  Messagebox(eDatum.TimeDifferenceDouble(oldBegin))
End If


eDatum ist dabei leer, oldBegin = 06.01.2003. Demnach müsste doch rein theoretisch eine negative Differenz entstehen oder versteh ich das grad falsch?
Was macht Notes, wenn ich ein Datum mittels New NotesDateTime erstelle und als Übergabeparameter einen leeren String übergebe? In der Designer-Hilfe steht nur, dass

Zitat
If you use an empty string (""), the date is set to a wildcard date.

Was versteht man unter einem "wildcard date"?

Hoffe, ihr könnt mir hierbei behilflich sein.

Danke und Gruß
Katja

Glombi

  • Gast
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #1 am: 15.06.05 - 09:52:36 »
Die Differenz ist 0.

Der Screenshot zeigt, wie ein"Wildcard date" aussieht.

Andreas

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #2 am: 15.06.05 - 09:54:13 »
Wenn E Datum leer ist kannst du keine Zeit Differenz ermitteln, der Rückgabe Wert ist 0. Wie denn auch, braucht man doch um eine Differenz zu ermitteln zwei Werte. Du hast aber nur einen.

Was die Wildcard angeht, da drückt sich die Hilfe glaube ich missverständlich aus (übersetze als ist schlicht und einfach falsch), denn ein Test damit:
Dim session As New NotesSession
Dim dateTime As NotesDateTime
Set dateTime = session.CreateDateTime( "" )
Messagebox( dateTime.LocalTime )
Messagebox( dateTime.GMTTime )

ergibt das es eben nichts ergibt. Datetime ist zwar definiert, hat aber keinen Wert. Die Rückgabewerte für Localtime, GMTtime, Zonetime, Dateonly und Timeonly sind leer. LSLocaltime und LSGMTTime haben als Wert 00:00:00 TimeZone 0, ISDST False und ISVALIDDATE ist True, was komplett idiotisch ist, weil das nun wirklich kein Valides Datum ist.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #3 am: 15.06.05 - 10:00:33 »
Vielen Dank euch zweien. Aber wie kann ich dennoch in einem solchen Fall zwei Datums vergleichen? Habt ihr eine Idee?

Glombi

  • Gast
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #4 am: 15.06.05 - 10:06:26 »
Was ist denn das Problem  ???

Wie gesagt, in einem solchen Fall, d.h. wenn ein Datum als Wildcard da ist, ist die Differenz gleich 0.

Andreas

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #5 am: 15.06.05 - 10:17:51 »
Also: ich durchsuche alle Dokumente einer bestimmten Ansicht und ziehe von diese zwei Datumswerte heraus: oldBegin und oldEnde. Diese beiden Datumswerte vergleiche ich mit dem aktuell geöffneten Dokument (neues Dokument), also mit aDatum und eDatum. Ist aDatum bzw. eDatum bereits im Zeitraum von oldBegin - oldEnde enthalten, soll eine Fehlermeldung ausgegeben werden.

Beispiel:
oldBegin: 06.01.2003
oldEnde: 18.02.2003

aDatum: 02.04.2003
eDatum: ""

Weil nun aber eDatum.TimeDifferenceDouble(oldBegin) = 0 TRUE zurückliefert, geht Notes in die "falsche" Abfrage rein und gibt die Fehlermeldung aus, obwohl ja der 02.04.03 überhaupt nicht im Zeitraum vom 06.01.2003 - 18.02.2003 liegt.

Konnte ich das Problem einigermaßen gut erläutern? Ich weiß nicht, wie ich das am besten löse...String-Vergleich geht ja auch nicht... :-:

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #6 am: 15.06.05 - 10:51:36 »
Das ist kein Problem das du über den Sprachansatz löst sondern eines das du erst einmal über die Logik lösen musst.

zum Einen musst du dir darüber klar werden was du willst.
Du hast hier offensichtlich zwei DateRanges.
Range1 = oldBegin und OldEnde
Range2 = aDatum (soll wohl Anfangsdatum heisen) und eDatum (Enddatum?)

Deine Bedingung ist das entweder aDatum oder eDatum im Bereich in Range1 liegen sollen.
Das heist wenn
oldbegin <=adatum <=oldEnde oder
oldbegin <=edatum <=oldEnde dann ist alles richtig.
ein nicht eingegebenes Datum ist folglich nicht in dem Bereich enthalten und fällt damit weg.
So beschreibst du das, obwohl ich da so meine Zweifel habe ob das richtig ist, denn so was macht nur dann Sinn wenn du überprüfen willst ob Range2 in Range1 enthalten ist.
Also erste Maßnahme, dafür sorgen das eDatum auf jeden Fall gesetzt wird.
Zweite Maßnahme, sollte entweder eDatum oder aDatum nicht gesetzt sein dann setze den nicht gesetzten Wert gleich dem gesetzten Wert.
Dritte Maßnahme,  gehe nicht über den timedifferencedouble sondern vergleiche die Datum Werte direkt miteinander. und wenn es wirklich ein Range2 in Range1 enthalten prblem ist dann geht das mit:
oldbegin <=adatum AND eDatum <=oldende

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #7 am: 15.06.05 - 11:17:03 »
du hast das Problem richtig erkannt. Liegt Range2 innerhalb von Range1, dann soll eine Fehlermeldung rauskommen. Diese soll aber auch kommen wenn:

aDatum < oldBegin AND eDatum > oldEnde

Bsp: Range1: 18.02.03 - 20.02.03
        Range2: 17.02.03 - 21.02.03

eDatum darf aber auch leer sein. Ist so festgelegt worden. Aber wie vergleich ich Datumswerte direkt miteinander? Bin bereits über DateOnly gegangen, aber Strings mit > oder < vergleichen hat auch nicht funktioniert. Daher bin ich über TimeDifferenceDouble gegangen. Das erweist sich jetzt auch als "unbrauchbar". Bin langsam mit meinem Latein am Ende. Was nun?  :-:

Offline Thomas Schulte

  • @Notes Preisträger
  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #8 am: 15.06.05 - 12:53:00 »
Also wenn Edatum auch leer sein darf dann ist aDatum = edatum denn der Range ist dann halt exakt dieser Tag.
Logische Schlussfolgerung.
Also ist die Fehlermeldung dann relevant wenn:
(oldbegin <=adatum AND eDatum <=oldende) OR (adatum < oldbegin AND eDatum > oldEnde)
Und so funktioniert das:

Set begindate = session.CreateDateTime( "01.01.2004" )
Set enddate = session.CreateDateTime( "" )
Set oldbegindate = session.CreateDateTime( "01.02.2004" )
Set oldenddate = session.CreateDateTime( "01.09.2004" )
If enddate.DateOnly = "" Then
   Set enddate = begindate
End If
If (oldbegindate.lslocaltime <= begindate.lslocaltime And enddate.lslocaltime <=oldenddate.lslocaltime)_
Or (begindate.lslocaltime < oldbegindate.lslocaltime And enddate.lslocaltime > oldEnddate.LSLocalTime) Then
   Messagebox("Fehler")
Else
   Messagebox("OK")
End If

Wobei ich immer noch nicht sicher bin ob du deine Randparameter richtig gesetzt hast weil mir diese Art des Vergleiches spanisch vorkommt.

Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline Katja_S

  • Junior Mitglied
  • **
  • Beiträge: 76
  • Geschlecht: Weiblich
Re: NotesDateTime und TimeDifferenceDouble
« Antwort #9 am: 15.06.05 - 13:15:54 »
Danke dir, Thomas. Habe deine Maßnahme mit dem Setzen des Enddatums = Anfangsdatum (falls Enddatum leer ist) umgesetzt und jetzt scheint alles (mit TimeDifferenceDouble und NotesDateTime) zu funktionieren. Die Randbedingungen sollten eigentlich stimmen. Zur Info:

beginDate == oldBeginDate
endDate ==oldEndDate
beginDate == oldEndDate
endDate ==oldBeginDate

beginDate > oldBeginDate AND beginDate < oldEndDate
endDate > oldBeginDate AND endDate < oldEndDate
beginDate < oldBeginDate AND endDate > oldEndDate
beginDate > oldBeginDate AND endDate < oldEndDate


Die Variante mit CreateDateTime und lslocaltime werde ich mir auch mal näher anschauen. Also, vielen Dank!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz