TDateTime Vergleiche
-
Hallo,
ich habe ne Frage zu 'TDateTime' und Zeitvergleich.
Ich möchte feststellen ob die aktuell ausgelesene Zeit n die ich mit
'Now()' erhalte größer als a und kleiner als b ist.a und b sind die Anfangszeit und Endzeit eines Internettarifs.
Sinn der Sache ist den naheliegensten Zeitabschnitt anzuzeigen der bei diesem
Provider möglich ist.Beispiel:
Ein Tarif ist gültig von 19-9h.
Uhrzeit von 'Now()' 20:15h.Wie stelle ich jetzt mit 'TDateTime' fest das 9h schon am nächsten Tag ist und
damit die Bedingung 'true' wäre ?Nächste Problem die 24 Uhr Grenze.
Tarif: 18-0h
Laut Hilfedatei von 'EncodeTime()' wird bei Übergabe von 0 eine Zeitvariable
von 24h erstellt. 24h wäre laut 'TDateTime' also 1.0. Passiert aber nicht.Einfach gesagt ich habe momentan keinen blassen Schimmer wie ich einfach einen
Zeitvergleich mache.Ich habe die Tarife in einer 'struct' als Array. Ich benutze Integer da ich die
Tarife später umwandle. Und das klappt ja auch bis auf 24h wo ich manuell per
'if'-Abfrage nachhake.Tarif[0].zeit.von[0]=19; Tarif[0].zeit.bis[0]=9; Tarif[0].zeit.von[1]=0; Tarif[0].zeit.bis[1]=9;Danke.

-
Hallo
ueberleg dir einfach wie du es selbst machen wuerdest und
setze das dann Softwaretechnisch umMfG
Klaus
-
Nach der Nachricht vom Mod. habe ich mich nochmal in Ruhe hingesetzt und bin zu folgender Lösung gekommen. Vielleicht interessiert es ja jemanden.
(Bisher nicht
)//--------------------------------------------------------------------------- // // bool InTime(int _a,int _b) // // Prüft ob die aktuelle Zeit zwischen _a und _b passt. // // _a -- Anfangszeit // _b -- Endzeit // // Rückgabewert: // bool -- false, wenn aktuelle Zeit außerhalb von _a und _b // true, wenn aktuelle Zeit innerhalb von _a und _b // // Hinweis: // Funktion gibt false zurück wenn akutelle Zeit == _a oder aktuelle Zeit == _b. // (Das ist Absicht.) // //--------------------------------------------------------------------------- bool InTime(int _a,int _b) { TDateTime n=Time(); // get actual time TDateTime TDa,TDb; TDa=EncodeTime(_a,0,0,0); // convert time ... TDb=EncodeTime(_b,0,0,0); // to TDateTime // check if 'Zeitzone' uses midnight ;-) and is in range if( (24-_a) < (24-_b) ) { if( ((n>TDa) && (n>TDb)) || ((n<TDb) && (n<TDa))) return true; } else // Zeitzone at same day { if( (n>TDa) && (n<TDb) ) return true; } return false; // nothing appropiate ... go back. }Fed.
-
Fedora schrieb:
Nach der Nachricht vom Mod. habe ich mich nochmal in Ruhe hingesetzt und bin zu folgender Lösung gekommen. Vielleicht interessiert es ja jemanden.
kann man solche Modantworten nicht automatisieren?

-
Ich würde den String, den Time() zurückgibt, in drei Teile aufteilen!
Stunden, Minuten und Sekunden. Die würde ich in entsprechende Variablen
stecken. Dann würde ich aus dem String der Date() zurückgibt, die
Tage herraussuchen und wieder in´eine Variable stecken.Und schon kannst du rausfinden, welche Tarife gerade gelten.