Timespan - Verständnisschwierigkeiten

flotschie

Mitglied
Hi,

ich habe eine Date-Variable 'zeit' mit Datum und Uhrzeit von heute, und möchte mir die Minuten zurückgeben lassen, die seitdem vergangen sind. Wenn 'zeit' länger als 10 Minuten her ist soll abgebrochen werden. Ich verwende deshalb Now.Subtract(zeit).

Das Problem #1:

- Minuten werden nur bis 59 zurückgegeben . Liegt das Datum länger als eine Stunde her wird nur die Minutendifferenz zurückgegeben und die Stunde ignoriert.Workaround sind hier zwei umständliche Umfragen:

Code:
If Now.Subtract(zeit).Hours > 1 then
exit sub
elseif Now.Subtract(zeit).Minutes > 10 then
exit sub
end if

...das muss doch besser gehen?


Problem #2:

-obige Funktion hat noch einen Hänger, und zwar, wenn die Variable 'zeit' eine Uhrzeit beinhaltet, die NACH dem System.Date Object 'Now' liegt. Also z.b.

Now = 14:00:00
zeit = 14:00:01

...was bei meinem Programm durchaus vorkommen kann. Das Problem hierbei ist, das obiger Code dann schon bei den 'Hours' abbricht mit Ergebnis, das 'zeit' schon über 23 Stunden her ist! Wobei das richtige Ergebnis eigentlich -1 Sekunde sein sollte.

Hoffe es kann mir wer helfen...
 
Hi.

Die Eigenschaften Minutes, Hours etc. geben nur die Zeiteinheiten an, bis zur nächst höheren Einheit.

Es gibt aber noch die Eigenschaften TotalSeconds, TotalMinutes etc.
Diese beinhalten alle Minuten, oder alle Sekunden. Die wären wohl für dich praktischer, oder?

Und wenn du immer die Differenz brauchst, egal ob die eine Zeit vorne ist, die andere, solltest du das Ergebnis noch durch Math.Abs jagen, dann hast du immer eine positive Zahl.


MfG,
Alex
 
Muss den Thread leider wieder eröffnen.

Der Befehl

Code:
Now.Subtract(zeit).TotalMinutes

bringt mir wenn zeit = 10:20:34 und Now = 10:20:33 eine Differenz von 59 (Minuten). Es sollte aber -1 sein von der Logik her...
 
Hi.

1) Speichere die aktuelle Zeit gleich mal als Erstes in eine Variable, vorallem wenn du mehrere Überprüfungen hast, sonst hast bei jeder davon einen neuen Wert, das kann mal blöd ausgehen.

2) Dann mach halt vorher eine Abfrage was größer ist, und je nachdem subtrahierst du.

MfG,
Alex
 
ah verstehe - ich mache den Vergleich mit Date.Compare(zeit_now, zeit), wenn das grösser null ist muss ich für mienen Vergleich dann noch zeit_now.Subtract(zeit).TotalMinutes berechnen - passt danke schön.
 
Funktioniert noch immer nicht und ich reiss mir schon inzwischen die Haare aus.

Das Problem ist das ich die 'zeit' variable als Date im Stundenformat bekommt. D.h. wenn ichs mir ausgeben lasse kommt z.b. "14:05:32" raus. Damit ist dann alles vergebens weils der Compi einfach nicht checkt. Oder ich. Weil nämlich:

Verlgeiche ich nämlich dann mit

Code:
Dim zeit_now as date = Now
Date.Compare(zeit_now, zeit)

dann kommt ein Wert grösser als 0 raus, was noch stimmt, wenn zeit_now "grösser" ist als zeit.

Wenn ich aber dann weiter vergleiche mit

Code:
If zeit_now.Subtract(zeit).TotalMinutes > 8 then


kommen immer Werte in der Grössenordnung 123213213123 raus. Ich nehme an, da keine Jahres/Monats/Tagsangaben in der
'zeit' Tariable enthalten sind, rechnet er vom Jahre 0 weg und kommt dann so aufs Ergebnis. Das ist aber Schwachsinn.

Ich habe mir jetzt gedacht, na gut, geb ich halt zur 'zeit' Variable das heutige Datum dazu - Schmecks. Hab noch immer nicht rausgefunden wie das gehen soll. Bitte noch einen Tipp :)
 

Neue Beiträge

Zurück