| |
Visual-Basic EinsteigerStunden und Minuten addieren | | | Autor: DustyD. | Datum: 23.04.22 18:06 |
| Ich möchte gern mehrere Zeitangaben, die in einer Textdatei im Format h:mm vorliegen, addieren und das Ergebnis dann auch wieder in Stunden und Minuten ausgeben. Mit TimeValue funktioniert das auch prima, bis der Wert 24h übersteigt:
?timevalue("20:00") + timevalue("02:30") --> "22:30:00"
?timevalue("22:30") + timevalue("04:30") --> "31.12.1899 03:00:00"
Das Doofe ist, dass als Datum IMMER der 31.12.1899 angezeigt wird, sobald die "Datumsgrenze" überschritten wird, soll heißen: Immer, wenn die Addition ein Vielfaches von 24h übersteigt, wird dem Ergebnis "31.12.1899" vorangestellt und die Stunden fangen wieder bei 0 an. Scheint also der falsche Ansatz zu sein, weil hier von UHRZEITEN ausgegangen wird und nicht von ZEITEN.
Ich könnte den String "h:mm" aus der Textdatei jetz nach Minuten wandeln, dann alle Minuten-Werte addieren und wieder in Stunden und Minuten zurück rechnen.
Geht es vielleicht auch einfacher? | |
Re: Stunden und Minuten addieren | | | Autor: Kuno60 | Datum: 23.04.22 21:32 |
| Einfacher geht es nur mit .NET. Bei VB6 ist mir keine einfache Lösung bekannt.
Mache es so, wie du bereits geschrieben hast:
Die Zeiten in Minuten umwandeln, z.B. mit TimeValue() und DateDiff(), dann die Minuten addieren und in Stunden und Minuten umrechnen. | |
Re: Stunden und Minuten addieren | | | Autor: Manfred X | Datum: 23.04.22 21:37 |
| Hallo!
Wenn ich recht erinnere, gibt es keine einfachere (integrierte) Möglichkeit in VB.
Die Methoden beruhen auf einer Zeitachse. Zeitpunkte auf dieser Achse sind stets durch
Datum plus Uhrzeit gegeben und werden entsprechend verarbeitet.
Zudem ist die Darstellung der Ergebnisse Deiner Addition nicht eindeutig.
Sollen jeweils 24 Stunden in einen Tag umgerechnet werden?
Aus 25 Stunden wird dann eventuell 1 Tag und eine Stunde. | |
Re: Stunden und Minuten addieren | | | Autor: minimalist | Datum: 24.04.22 11:46 |
| Hallo,
die Frage ist unklar. Willst du Zeiten addieren, wie zum Beispiel ein Anwalt die Zeiten Aufrechnet um eine Rechnung zu schreiben oder willst du wissen was die Zeit nach einer gewissen Anfangszeit ist? Bitte Klarstellen
Beitrag wurde zuletzt am 24.04.22 um 11:47:04 editiert. | |
Re: Stunden und Minuten addieren | | | Autor: DustyD. | Datum: 24.04.22 12:28 |
| Ich möchte gern mehrere Zeitangaben [...] addieren und das Ergebnis [...] in Stunden und Minuten ausgeben.
Ich dachte eigentlich, die Formulierung sei eindeutig gewesen. Das Beispiel mit dem Anwalt passt aber ganz gut. Real geht es um Zeitarbeitskonten. Ich möchte halt die Soll- und die Ist-Stunden eines Monats addieren. Wenn es dafür in VB6 keine Anweisung gibt, mache ich es halt nach guter alter Väter Sitte und rechne wie im Urpost schon geschrieben, alles in Minuten um. | |
Re: Stunden und Minuten addieren | | | Autor: Hollie | Datum: 27.04.22 17:02 |
| Hallo Dusty, vielleicht habe ich eine Idee. Mal auf eine hoffentlich verständliche Art ein Beispiel:
Private Command1()
Call Endestunde_Bestimmen("20:00", "02:30") *Aufruf des Gut-Falles
End Sub
Private Command2()
Call Endestunde_Bestimmen("22:00", "04:30") *Aufruf des Gut-Falles
End Sub
Private Sub Endestunde_Bestimmen(Start as String, Dauer as String)
Select Case True
'Ok-Fall:
Case CSng(TimeValue(START)) + CSng(TimeValue(LAeNGE)) < 1
MsgBox Format(TimeValue(START) + TimeValue(LAeNGE), "hh:mm")
'"31.12.1899"-Fall:
Case CSng(TimeValue(START)) + CSng(TimeValue(LAeNGE)) > 1
MsgBox Format(CSng(TimeValue(START)) + CSng(TimeValue(LAeNGE)) - 1, "hh:mm")
End Select
End Sub
Anstelle üder MsgBox kannst Du das Ergebnis ja in eine Variable o.ä. übernehmen oder die Sub gar in eine Funktion umwandeln.
So, hoffe doch, jetzt hier keinen Schreibfehler reingebastelt und Dir einen Tipp spendiert zu haben.
Viele Grüße. | |
Re: Stunden und Minuten addieren | | | Autor: Hollie | Datum: 27.04.22 17:19 |
| Sorry, doch ein inhaltlicher Fehler: mit "Command2" wird der "31.12.1899"-Fall simuliert, also nicht der "Gut"-Fall.
Leider hat auch das Einrücken der Zeilen innerhalb der Subs nicht gefunzt, sieht doof aus, tut mir leid. | |
Re: Stunden und Minuten addieren | | | Autor: DustyD. | Datum: 27.04.22 22:48 |
| Huhu Hollie,
TimeValue gibt einen String mit einer Uhrzeit zurück, CSng führt zu "Typen unverträglich". Die Abfragen auf <1 und >1 verstehe ich leider auch nicht wirklich.
Ich habe es mittlerweile wie im Urthread beschrieben gelöst: In einer Function wandele ich den ankommenden String in Minuten (alles vor dem Doppelpunkt *60 + alles nach dem Doppelpunkt). Geht mit Instr() sehr komfortabel. Dann addiere ich alle Minuten und wandele wieder in Std. | |
Re: Stunden und Minuten addieren | | | Autor: Kuno60 | Datum: 28.04.22 00:55 |
| Hallo,
da liegst du leider etwas falsch. TimeValue gibt keinen String zurück, sondern den Typ Date. Date kann man in den Typ String umwandeln oder mit CSng in den Typ Single.
So kann man es mit DateDiff machen:
Dim d As Date
Dim m1, m2, min As Long
m1 = DateDiff("n", d, TimeValue("21:30"))
m2 = DateDiff("n", d, TimeValue("05:45"))
min = m1 + m2 ' Gesamt Minuten = 1635
' Umrechnung:
Dim std As Double
std = min / 60 ' Gesamt Stunden = 27,25
' oder
Dim Stunden, Minuten As Integer
Stunden = min \ 60 ' 27 Stunden und
Minuten = min Mod 60 ' 15 Minuten | |
Re: Stunden und Minuten addieren | | | Autor: Hollie | Datum: 28.04.22 08:01 |
| Hallo DustyD, hallo Kuno60,
"dgl" (dumm gelaufen), sorry.
Da hatte ich wohl das Bearbeitungsziel nicht korrekt verstanden. Ich ging davon aus, dass der Ausdruck "31.12.1899" stört. Gut, im geschilderten Fall sollte wohl das gewünschte Ergebnis "27:00" lauten. Dann war mein "Tipp" wirklich daneben.
DustyD: einen LfzF hab ich mit dem Code nicht, das hatte ich ja ausprobiert. Aber egal, Du hast ja nun die Lösung.
Beste Grüße. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|