vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

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

VB.NET - Ein- und Umsteiger
Re: Zeitdifferenzen Tarifsystemen 
Autor: Maas
Datum: 27.03.09 10:45

Ich hab da mal eine Funktion geschrieben. Ich finde es sieht etwas zusammen gefriemelt aus, aber es funktioniert.
    Private Function GetHours(ByVal date1 As Date, ByVal date2 As Date, _
      Optional ByVal tarifAb As Integer = 6, Optional ByVal tarifBis As Integer _
      = 22) As Double()
        Dim tarife(1) As Double
        Dim nextPointDate As Date
        Dim hochTarif As Boolean
        tarife(0) = 0
        tarife(1) = 0
 
        If date1.Hour < tarifAb Then
            nextPointDate = date1.AddMinutes((date1.Hour * 60 + date1.Minute) * _
              (-1)).AddHours(tarifAb)
            tarife(1) += nextPointDate.Subtract(date1).Minutes + _
            nextPointDate.Subtract(date1).Hours * 60
            hochTarif = True
        Else
            nextPointDate = date1.AddMinutes((date1.Hour * 60 + date1.Minute) * _
              (-1)).AddHours(tarifBis)
            tarife(0) += nextPointDate.Subtract(date1).Minutes + _
            nextPointDate.Subtract(date1).Hours * 60
            hochTarif = False
        End If
 
        Dim hochtarifH As Integer
        If tarifAb < tarifBis Then
            hochtarifH = tarifBis - tarifAb
        Else
            hochtarifH = (24 - tarifAb) + tarifBis
        End If
        Dim niedertarifH As Integer = 24 - hochtarifH
 
 
        Do
            Dim actualDate As Date = nextPointDate
            If hochTarif Then
                nextPointDate = nextPointDate.AddHours(hochtarifH)
                If nextPointDate.Subtract(actualDate) < date2.Subtract( _
                  actualDate) Then
                    tarife(0) += hochtarifH * 60
                Else
                    nextPointDate = actualDate
                    Exit Do
                End If
            Else
                nextPointDate = nextPointDate.AddHours(niedertarifH)
                If nextPointDate.Subtract(actualDate) < date2.Subtract( _
                  actualDate) Then
                    tarife(1) += niedertarifH * 60
                Else
                    nextPointDate = actualDate
                    Exit Do
                End If
            End If
 
            hochTarif = Not hochTarif
        Loop
 
        Dim rest As Integer = date2.Subtract(nextPointDate).Minutes + _
          date2.Subtract(nextPointDate).Hours * 60
        If hochTarif Then
            tarife(0) += rest
        Else
            tarife(1) += rest
        End If
        tarife(0) = tarife(0) / 60
        tarife(1) = tarife(1) / 60
 
        Return tarife
    End Function
Aufrufen kannst du das Ganze z.B. mit
Dim s() As Double = GetHours(CDate(TextBox1.Text), CDate(TextBox2.Text))
Label1.Text = s(0) & "Stunden Hochtarif" & vbCrLf & s(1) & "Stunden Niedertarif"
Maas

Edit: Habe noch die optionalen Parameter hinzugefügt.

Beitrag wurde zuletzt am 27.03.09 um 11:16:24 editiert.
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Zeitdifferenzen Tarifsystemen1.196Morfeus8226.03.09 13:53
Re: Zeitdifferenzen Tarifsystemen734ModeratorRalf Ehlert26.03.09 18:54
Re: Zeitdifferenzen Tarifsystemen739Morfeus8227.03.09 08:01
Re: Zeitdifferenzen Tarifsystemen749Maas27.03.09 10:45
Re: Zeitdifferenzen Tarifsystemen702Morfeus8227.03.09 22:41
Re: Zeitdifferenzen Tarifsystemen743Maas28.03.09 13:23
Re: Zeitdifferenzen Tarifsystemen676Morfeus8228.03.09 14:09
Re: Zeitdifferenzen Tarifsystemen704Maas28.03.09 15:13
Re: Zeitdifferenzen Tarifsystemen635Morfeus8208.04.09 08:47

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-2025 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