| |
Visual-Basic EinsteigerZeitdifferenz berechnen | | | Autor: caramba | Datum: 09.05.13 16:06 |
| Hallo,
im Formum gibt es verschiedene Ansätze um die Differenzen zwischen 2 Zeiten zu berechnen. Mit
keiner Variante erhalte ich aber das gewünschte Resultat.
Ich habe folgende Ausganglage:
Startdatum/Zeit: 10.04.2013 12:45
Enddatum/Zeit 12.04.2013 16:30
Wie kann ich hier die Differenz in Tagen, Stunden und Minuten errechnen ?
Danke
Rainer | |
Re: Zeitdifferenz berechnen | | | Autor: L...N | Datum: 09.05.13 16:30 |
| Hi,
so etwa:
Dim sD As Date
Dim nD As Date
sD = "10.04.2013 12:45"
nD = "12.04.2013 16:30"
MsgBox Format((nD - sD), "dd:hh.mm.ss")
oder
MsgBox Format((nD - sD), "dd Tage hh.mm.ss")
es gibt auch noch andere Möglichkeiten. 0
Beitrag wurde zuletzt am 09.05.13 um 16:39:33 editiert. | |
Re: Zeitdifferenz berechnen | | | Autor: Franki | Datum: 10.05.13 02:56 |
| Hallo Rainer,
was für Varianten hast du denn probiert?
Bzw. was für ein falsches Ergebnis haben deine Berechnungen ergeben?
Auf die Schnelle mal:
Private Sub Form_Load()
Dim Startdatum As Date
Dim Enddatum As Date
Startdatum = "10.04.2013 12:45"
Enddatum = "12.04.2013 16:30"
Zeitdifferenz = DateDiff("n", Startdatum, Enddatum)
MsgBox Zeitdifferenz & " Minuten"
End Sub Bringt ein plusibles Ergebnis. Schau dir mal die Hilfe zu DateDiff usw. an, da gibt es ein Intervall (n in meinem Beispiel für Minuten) da kannst du auch andere Intervalle nehmen. Grob gesehen passt das mit DateDiff. Von ein paar Ausnahmen abgesehen, aber mit deinen Angaben ist es richtig.
Also wo genau liegt dein Problem bzw. was sind deine Ergebnisse mit welchem Code?
Von den ganzen Format-Sachen halte ich Abstand für Berechnungen, die nutze ich nur dann zur Anzeige wenn das Ergebnis optisch aufbereitet werden soll für den User.
Gruß
Frank
| |
Re: Zeitdifferenz berechnen | | | Autor: caramba | Datum: 10.05.13 06:12 |
| Hallo Franki,
danke für Deine Antwort. Dein Beispiel funktioniert und ich habe nun auch meinen
Fehler, welcher mich fast zur Verzweiflung getrieben hat, gesehen.
Im Gegensatz zu Deinem Beispiel hatte ich die Vergleichsfelder einfach als Datum1
und Datum2 bezeichnet - was ja ok wäre. Dumm nur, dass ich diese dann beim DateDiff
vertauscht hatte .........
Nochmals herzlichen Dank und einen schönen Tag
Rainer | |
Re: Zeitdifferenz berechnen | | | Autor: Manfred X | Datum: 10.05.13 10:10 |
| Hallo!
Falls ich mich richtig erinnere, gab es auch
in VB 6 Typ-Umwandlungsfunktionen. Oder?
Option Explicit
Private Sub Form_Load()
Dim Startdatum As Date
Dim Enddatum As Date
Dim Zeitdifferenz As Long
Startdatum = CDate("10.04.2013 12:45")
Enddatum = CDate("12.04.2013 16:30")
Zeitdifferenz = CLng(DateDiff("n", Startdatum, Enddatum))
MsgBox CStr(Zeitdifferenz) & " Minuten"
End Sub | |
Re: Zeitdifferenz berechnen | | | Autor: Manfred X | Datum: 10.05.13 18:01 |
| Nun ja!
Ich habe eigentlich einen String bei der Zuweisung in Date gewandelt,
dachte ich zumindest! Vb6 ist aber schon sooo lange her ....
MSDN:
[I]Jeder gültige Wert eines Datums- oder Zeitliterals kann einer Variablen
vom Datentyp Date zugewiesen werden. Ein Datumsliteral muß durch das
Zeichen (#) eingeschlossen sein, zum Beispiel: #January 1, 1993#.[/I]
Beitrag wurde zuletzt am 10.05.13 um 18:09:25 editiert. | |
Re: Zeitdifferenz berechnen | | | Autor: Franki | Datum: 11.05.13 03:49 |
| Hallo Rainer
Zitat: | |
Im Gegensatz zu Deinem Beispiel hatte ich die
Vergleichsfelder einfach als Datum1
und Datum2 bezeichnet - was ja ok wäre. Dumm nur, dass ich
diese dann beim DateDiff
vertauscht hatte .........
| |
Ok, das passiert halt, aber wieso ist dir das nicht aufgefallen? Das Ergebnis ist doch identisch, halt nur mit negativem Vorzeichen. Das Vorzeichen spielt ja auch keine Rolle, nur auf den Wert kommt es an.
Ob ich jetzt z.B. wissen will wie viele Minuten zwichen 13:00 und 14:00 liegen oder zwischen 14:00 und 13:00 Uhr liegen liefert ein identisches Ergebnis von der Zahl der Minuten.
Ich gestehe, dass ich mich da auch schon vertan habe, aber anhand des umgekehrten Vorzeichens erkennt man schnell, dass man die Variablen vertauscht hat.
Aber freut mich, dass ich dir helfen konnte.
Gruß
Frank
| |
Re: Zeitdifferenz berechnen | | | Autor: Franki | Datum: 11.05.13 04:08 |
| Hallo Manfred,
Zitat: | |
Nun ja!
Ich habe eigentlich einen String bei der Zuweisung in Date
gewandelt,
dachte ich zumindest! Vb6 ist aber schon sooo lange her ....
| |
Eben und genau das ist eigentlich falsch bzw. überflüssig bzw. erzeugt Fehler. Wenn es klar ist, dass es sich um Date handelt sollte man direkt mit diesem Datentyp arbeiten und nicht Texte (Strings) umwandeln.
Die (automatischen) Umwandlungsfunktionen in VB6/VBA usw. funktionieren zwar, aber sind unter Umständen doch fehlerhaft. Also besser direkt mit dem richtigen Datentyp arbeiten.
Zitat: | |
MSDN:
[I]Jeder gültige Wert eines Datums- oder Zeitliterals kann
einer Variablen
vom Datentyp Date zugewiesen werden.
| |
Richtig, die Betonung liegt/lag jedoch auf gültig.
Du erinnerst dich vielleicht, dass die VBClassic eigenen Funktionen IsDate/CDdate nicht zu 100% funktioniert haben. Ist das bei .NET jetzt gelöst? Ich kann dazu nichts sagen, da ich da bisher noch kein Problem mit diesem Datentyp hatte und grundsätzlich auch nicht umwandle.
Zitat: | |
Ein Datumsliteral muß
durch das
Zeichen (#) eingeschlossen sein, zum Beispiel: #January 1,
1993#.[/I] | |
Da verwechselst du aber jetzt was.
die # braucht man dafür in VB6 überheupt nicht, das war für DB-Abfragen gegen Access notwendig je nachdem. Aber für reine Berechnungen von Zeitdifferenzen brauchte man das nie.
Und in deinem Codebeispiel kam ja auch keine # vor.
Gruß
Frank
| |
Re: Zeitdifferenz berechnen | | | Autor: Manfred X | Datum: 11.05.13 13:37 |
| [I]"Wenn es klar ist, dass es sich um Date handelt sollte man direkt mit diesem Datentyp
arbeiten und nicht Texte (Strings) umwandeln."[/I]
Aber genau das hattest Du in Deinem Beispiel-Code gemacht (implizite Konvertierung).
Ich habe lediglich die "explizite Version" des Codes (Nutzung von "CDate") gepostet.
(Zuweisungen auf Date-Variablen per Code am besten per Literal, nicht als String.)
Intern wird der "Datentyp" Date übrigens als Double verarbeitet
(Nachkommastellen = Tageszeit; 0.5 = 12 Uhr).
Genaueres: http://www.vbarchiv.net/tipps/details.php?id=1308
(Hinweis zum Rückgabetyp von "DateDiff" beachten!)
| |
| 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
|