| |
VB.NET - FortgeschritteneTimeSpan - Fehler bei 24 Uhr | | | Autor: H?nk | Datum: 12.02.19 17:14 |
| Hallo Forum
kann mir jemand sagen wie ich in TimeSpan die Zeit 0:00 Uhr bzw 24:00 Uhr eingebe bzw. berechne?
Im konkreten möchte ich die Zeit von z.B. 19:30 bis 24:00 Uhr ermitteln.
Nur - bei 24:00 gibt mir eine Fehlermeldung aus.
(TimeSpan konnte nicht analysiert werden, da sich mindestens eine der numerischen Komponenten außerhalb des gültigen Bereichs befindet oder zu viele Ziffern enthält.)
Vielen Dank
Hänk
(Wer früh aufsteht hat mehr vom Tag) | |
Re: TimeSpan - Fehler bei 24 Uhr | | | Autor: Manfred X | Datum: 13.02.19 07:18 |
| Hallo!
In den DateTime-Klassen des Framework sind Angaben zu
Stunden von 0-23 und zu Minuten von 0-59 definiert.
Der Zeitpunkt 24:00 ist in einer Date-Variable als
Zeitpunkt 00:00 des darauf folgenden Tages anzugeben.
Date- bzw. Datetime-Variable beziehen sich auf einen
Zeitpunkt und enthalten deshalb stets ein Datum UND eine
Uhrzeit.
Die Timespan-Struktur enthält keine Uhrzeit,
sondern ein Zeitintervall ausgedrückt in Ticks oder
umgerechnet in eine Anzahl von Tagen plus Stunden plus ....
Beitrag wurde zuletzt am 13.02.19 um 07:26:23 editiert. | |
Re: TimeSpan (Beispiel) | | | Autor: Manfred X | Datum: 13.02.19 08:01 |
| Private Function GetTimeSpan
(hour1 As Integer, minute1 As Integer, second1 As Integer,
hour2 As Integer, minute2 As Integer, second2 As Integer) As TimeSpan
Dim day1 As Integer = 1, day2 As Integer = 1
If hour1 = 24 Then
If (minute1 <> 0 Or second1 <> 0) Then
Throw New ArgumentException("Unzulässige Zeitangabe")
End If
hour1 = 0 : day1 = 2 'Tageswechsel
End If
If hour2 = 24 Then
If (minute2 <> 0 Or second2 <> 0) Then
Throw New ArgumentException("Unzulässige Zeitangabe")
End If
hour2 = 0 : day2 = 2
End If
Dim dt1 As New Date(1, 1, day1, hour1, minute1, second1)
Dim dt2 As New Date(1, 1, day2, hour2, minute2, second2)
Return New TimeSpan(dt2.Ticks - dt1.Ticks)
End Function Annahme: Die beiden Zeitangaben liegen im selben Tag,
sonst wäre ein zusätzlicher Parameter für die Zahl der
Tageswechsel zwischen den beiden Uhrzeiten erforderlich.
Beitrag wurde zuletzt am 13.02.19 um 08:15:58 editiert. | |
Re: TimeSpan -und Tagnummer im Jahr | | | Autor: minimalist | Datum: 13.02.19 08:35 |
| Der unterschied zwischen 24 Uhr und 00 Uhr ist das 24 Uhr ist das Ende eines Tages und 00 Uhr ist der Anfang des nächste Tages. So 24 Uhr kann verwendet werde wenn man sich innerhalb eines Tages bewegt, 00 wenn man den nächsten Tag ansprechen will. | |
Re: TimeSpan -und Tagnummer im Jahr | | | Autor: Manfred X | Datum: 13.02.19 08:39 |
| Die Differenzierung des Tageswechsels in Ende des
Tages (24:00) und Anfang des Tages (00:00) gibt es
nur im allgemeinen.
In VB.Net sind Zeitpunkte eindeutig definiert.
Einen Zeitpunkt 24:00 gibt es deshalb nicht. | |
Re: TimeSpan -und Tagnummer im Jahr | | | Autor: minimalist | Datum: 13.02.19 09:32 |
| So ganz verstehe ich deine Antwort nicht. Wenn ich eine Zeitspanne berechnen will muss ich schon wissen ob diese innerhalb eines Tages oder mehrere Tage umfasst. Und die Zeiten 24 Uhr und 00 Uhr sind schon wichtig.
Beispiel:
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Button1.Text = "Exit"
Button2.Text = "24 (same day)"
Button3.Text = "00 (different days)"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
Button1.Click
Application.Exit()
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles _
Button3.Click
Dim startTime As System.TimeSpan = New System.TimeSpan(43, 22, 0, 0) _
' 22 Uhr abends today
Dim endTime As System.TimeSpan = New System.TimeSpan(44, 0, 0, 0) _
'00 Uhr morgen früh
Dim duration As System.TimeSpan = endTime - startTime
Label1.Text = Label1.Text & duration.ToString
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles _
Button2.Click
Dim startTime As System.TimeSpan = New System.TimeSpan(44, 22, 0, 0) _
' 22 Uhr abends today
Dim endTime As System.TimeSpan = New System.TimeSpan(44, 24, 0, 0) _
'24 Uhr heute
Dim duration As System.TimeSpan = endTime - startTime
Label1.Text = Label1.Text & duration.ToString
End Sub
End Class | |
Re: TimeSpan -und Tagnummer im Jahr | | | Autor: Manfred X | Datum: 13.02.19 10:27 |
| Die TimeSpan-Struktur beinhaltet keine Uhrzeit,
sondern ein Zeitintervall.
Insofern sind Deine Kommentare falsch.
Du berechnest im ersten Fall den Unterschied zwischen
einem Intervall von 44 Tagen und einem Intervall von
43 Tagen 22 Stunden.
Du berechnest im zweiten Fall den Unterschied zwischen
einem Intervall von 44 Tagen 24 Stunden (=45 Tage) und
einem Intervall von 44 Tagen 22 Stunden.
Da kommt überhaupt kein Datum und keine Uhrzeit vor.
Nur Zeitdauern !!!
Ein Zeitpunkt (= Datum + Uhrzeit) wird in einer Date / DateTime-Variable
aufbewahrt. Und dort ist 24:00 als Uhrzeit nicht zugelassen.
Beitrag wurde zuletzt am 13.02.19 um 10:41:21 editiert. | |
Re: TimeSpan -und Tagnummer im Jahr | | | Autor: H?nk | Datum: 13.02.19 16:05 |
| Hallo und erst mal herzlichen Dank für Eure Antworten.
da es mir ja um die Zeitdifferenz geht, komme ich mit der Lösung von "minimalist" (Butto2.Click) nun zurecht.
Mir war nur nicht klar wie ich genau BIS 24 Uhr rechnen bzw. diesen Wert angeben muß.
Mit NEW TimeSpan(24, 0, 0) paßt es jetzt.
Hatte da wohl 'nen Denkfehler.
Hänk
(Wer früh aufsteht hat mehr vom Tag) | |
Re: TimeSpan -und Tagnummer im Jahr | | | Autor: Manfred X | Datum: 13.02.19 16:47 |
| Und leider hast Du diesen Denkfehler immer noch.
Es kommt zwar auch beim Intervall-Vergleich für Dich
das passende Ergebnis .... aber:
Du rechnest nicht bis 24 Uhr, sondern mit 24 Stunden. | |
Re: TimeSpan -und Tagnummer im Jahr | | | Autor: H?nk | Datum: 13.02.19 18:15 |
| Das mit TimeSpan paßt doch nicht. Sorry
Ich arbeite nun über DateDiff - denke da komm ich jetzt hin.
Muß das aber noch genau durchtesten.
Hänk
(Wer früh aufsteht hat mehr vom Tag) | |
| 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 März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|