Autor Thema: Date/Time Vergleich + Range  (Gelesen 1089 mal)

Offline Andreas Bauer

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Date/Time Vergleich + Range
« am: 22.08.04 - 16:39:56 »
Hallo zusammen,

ich hoffe Ihr könnt mir helfen:

Ich habe eine Maske u.a. mit dem Feld "DayTime", editierbar (Datumfeld, Anzeige nur Uhrzeit)

Nun möchte ich mit einer Function, der ich das Backend-Dokument übergebe, eine Art Gültigkeitsprüfung machen (Rückgabewert Integer True/False, True wenn alles passt).

Die Function soll True zurückgeben, wenn z.B. folgendes zutrifft:

Fraction(Now) ist in der Range DayTime - 10 Minuten bis DayTime + 30 Minuten enthalten.

Beispiel:
Fraction(Now) = 17:00:00
Fraction(DayTime) = 17:05:00
Die Function soll hier TRUE zurückgeben, weil 17:00:00 in der Range (16:55:00 - 17:35:00) enthalten ist.


Wie kann ich das am einfachsten umsetzen? Brauch ich da unbedingt schon die NotesDateTime Klassen, oder reichen mit Variants?

Ich bin im Bereich DateTime-Handling ziemlicher Anfänger, und hoffe auf Tipps.

Danke,
Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Date/Time Vergleich + Range
« Antwort #1 am: 22.08.04 - 17:20:56 »
Hallo, Andreas,

willkommen im Forum !

Zu Deiner Frage: Nein, Du brauchst hier keine Notes DateTimeClass-Verrenkungen zu begehen, das geht über Variable vom Typ Variant viel einfacher:
Der "fractioned part" eines Notes DateTime fields liefert Dir - in ein Variant eingelesen - immer den Stunden-Minuten-Sekunden-Wert Deines Feldes zurück. Das einzige, was Du nun noch berücksichtigen musst zwecks Berechnungen, ist die Proportion "Ein Tag = 1, 12 Stunden = 0,5 Tage" etc.

Du musst also lediglich nach dem Auslesen Deines Feldes und der Bildung Deines Vergleichswertes (in Variablen des Typs "Variant") die erhaltenen Werte in entsprechende Relation setzen (eine halbe Stunde ist beispielsweise 0,02083Periode).

HTH,
Bernhard

Offline Andreas Bauer

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re:Date/Time Vergleich + Range
« Antwort #2 am: 22.08.04 - 17:29:10 »
Hallo Bernhard,

vielen Dank für die schnelle Hilfe !

Wie würdest Du das hier umsetzen mit anpassen von Zeitwerten?

Angenommen ich habe folgendes:
Code
Dim vJetzt as Variant
vJetzt = Fraction(Now)

Jetzt will ich vJetzt um z.B. 10 Minuten "hochsetzen".

Überlegt habe ich mir folgendes:

Code
Const EINE_MINUTE! = 6.94444446708076E-04
Dim vJetzt as Variant
vJetzt = Fraction(Now)
vJetzt = vJetzt + (EINE_MINUTE * 10)

Oder gibt es da vielleicht System-Konstanten die ich hier verwenden könnte?

Ansonsten würde ich das so machen.

Grüße,
Andreas

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Date/Time Vergleich + Range
« Antwort #3 am: 22.08.04 - 17:34:18 »
Derartige Systemkonstanten gibt es nicht (wozu auch  ;D). Dein Weg scheint mir (ohne das jetzt im Detail überprüft zu haben) als genau das Procedere zu sein, das am effizientesten wäre.

Good luck (und poste dann mal Dein Ergebnis fürdie Community),

Bernhard

Offline Andreas Bauer

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re:Date/Time Vergleich + Range
« Antwort #4 am: 22.08.04 - 17:49:52 »
OK, prima, danke für Deine Einschätzung.

Bis später :)
Andreas

Offline Andreas Bauer

  • Frischling
  • *
  • Beiträge: 16
  • Geschlecht: Männlich
  • Ich liebe dieses Forum!
Re:Date/Time Vergleich + Range
« Antwort #5 am: 22.08.04 - 18:28:25 »
Hier nun das Ergebnis:

Code
Public Function IsTimeValid(doc As NotesDocument) As Integer
   
   On Error Goto ErrorHandler
   
   '---------------------------------------------
   'Ein paar Konstanten
   '---------------------------------------------   
   Const L_TIMEFIELDNAME$ = "DayTime"
   Const L_MINUTE! = 6.94444446708076E-04
   Const L_BEFORE% = 10
   Const L_AFTER% = 30
   
   '---------------------------------------------
   'Declarations & Settings
   '---------------------------------------------   
   Dim vNow As Variant   
   Dim vTime As Variant
   Dim vTimeStart As Variant
   Dim vTimeEnd As Variant
   vNow = Fraction(Now)   
   vTime = Fraction(doc.GetItemValue(L_TIMEFIELDNAME)(0))
   vTimeStart = vTime - (L_BEFORE * L_MINUTE)
   vTimeEnd = vTime + (L_AFTER * L_MINUTE)
   
   '---------------------------------------------
   'Vergleich
   '---------------------------------------------   
   If vNow > vTimeStart And vNow < vTimeEnd Then
      IsTimeValid = True
   Else
      IsTimeValid = False
   End If
   
ExitNow:
   Exit Function
   
ErrorHandler:
   IsTimeValid = False
   Call ErrorMessage("Function: IsTimeValid")
   Resume ExitNow
   
End Function

Danke nochmal, Bernhard.

Grüße,
Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz