Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: DateDiff eli aikojen erotus

erkki [01.07.2013 22:24:37]

#

Moi
Olisi saatava vähän apua kun en saa DateDiff:llä toimimaan kellon aikojen vertailua, eli haen alku kelloaika ja loppu kelloaika eron esim. minutteina
VB6:ssa DateDiff toimi mutta tässä uudessa (minulle) 2010 versiossa ei vaan toimi

minkähänlainen koodi pitäisi kirjoittaa

VB6 oli tämä

    Private Sub laske_tyoaika()
        Dim aikaero1 As Single
        Dim ero As Long
        Dim aikaero As Long
        Dim aikaero3 As Single
        Dim aikaero2 As Single

        If MTX_lopetusaika.Text <> "__:__" Then
            ero = DateDiff("n", Val(MTX_aloitusaika.Text), Val(MTX_lopetusaika.Text))  ' aikaero minuutteina
            If ero <= 60 Then    ' jos 1 tunti tai alle tunti
                TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + ero / 60, "0.00")
                Exit Sub
            Else
                aikaero1 = ero Mod 60  ' jakojäännös täysistä tunneista minuutteina
                aikaero2 = aikaero1 / 60
                aikaero3 = Int(ero / 60)  ' täydet tunnit
                aikaero = aikaero3 + aikaero2  ' täydet tunnit plus osatunti
                TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + aikaero, "##0.00")
            End If
        End If
        Exit Sub
out:    MsgBox("Tarkista työajat")
        MTX_aloitusaika.SetFocus()
    End Sub

erkki

Mod. lisäsi kooditagit!

Grez [01.07.2013 22:48:27]

#

Jotenkin purkan näköinen, mutta jos säästän purkat niin:

    Private Sub laske_tyoaika()
        Dim aikaero1 As Single
        Dim ero As Long
        Dim aikaero As Long
        Dim aikaero3 As Single
        Dim aikaero2 As Single

        If MTX_Lopetusaika.Text <> "__:__" Then
            Dim aikaEr = DateTime.ParseExact(MTX_Lopetusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture) - _
                      DateTime.ParseExact(MTX_Aloitusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture)
            ero = CLng(aikaEr.TotalMinutes) ' aikaero minuutteina
            If ero <= 60 Then    ' jos 1 tunti tai alle tunti
                TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + ero / 60, "0.00")
                Exit Sub
            Else
                aikaero1 = ero Mod 60  ' jakojäännös täysistä tunneista minuutteina
                aikaero2 = aikaero1 / 60
                aikaero3 = Int(ero / 60)  ' täydet tunnit
                aikaero = aikaero3 + aikaero2  ' täydet tunnit plus osatunti
                TX_tilaus10.Text = Format(Val(TX_tilaus10.Text) + aikaero, "##0.00")
            End If
        End If
        Exit Sub
out:    MsgBox("Tarkista työajat")
        MTX_Aloitusaika.Focus()
    End Sub

Ja jos pahimmat purkat poistan niin:

Private Sub laske_tyoaika()
    If MTX_Lopetusaika.Text <> "__:__" Then
        Dim aikaEro = DateTime.ParseExact(MTX_Lopetusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture) - _
                  DateTime.ParseExact(MTX_Aloitusaika.Text, "HH:mm", System.Globalization.CultureInfo.InvariantCulture)

        Dim tunnit As Double = 0
        Double.TryParse(TX_tilaus10.Text, tunnit)

        tunnit += aikaEro.TotalHours

        TX_tilaus10.Text = tunnit.ToString("0.00")
    Else
        MsgBox("Tarkista työajat")
        MTX_Aloitusaika.Focus()
    End If
End Sub

Ja tässä huvin vuoksi vielä snadisti vähemmän purkka VB6 -versio:

Private Sub laske_tyoaika()
    If MTX_lopetusaika.Text <> "__:__" Then
        Dim tunnit As Double
        If (IsNumeric(TX_tilaus10.Text)) Then tunnit = CDbl(TX_tilaus10.Text)
        tunnit = tunnit + 24 * (CDate(MTX_lopetusaika.Text) - CDate(MTX_aloitusaika.Text))
        TX_tilaus10.Text = Format(tunnit, "0.00")
    Else
        MsgBox ("Tarkista työajat")
        MTX_aloitusaika.SetFocus
    End If
End Sub

erkki [02.08.2013 20:53:52]

#

On nyt taas venähtänyt....

Jotain on väärin kun kumpikaan esimerkki ei toimi > " Merkkijonoa ei tunnistettu kelvolliseksi DateTime-arvoksi. "

erkki

Grez [02.08.2013 23:57:18]

#

No onko se merkkijono esim. 12:33 vai jotain muuta?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta