vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Zeitdifferenz 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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


Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Zeitdifferenz berechnen 
Autor: effeff
Datum: 10.05.13 14:36

Hallo,

da Startdatum und Enddatum bereits als Date deklariert sind, ist es nicht erforderlich, diese nochmals explizit in einen anderen Typ umzuwandeln - dieses passiert bereits durch die Deklaration.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!)













Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel