Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: (vb.net) ms -> hh:mm:ss.ms

Sivun loppuun

Niko [03.02.2004 15:31:56]

#

eli millisekunneista pitäisi aika saada kyseiseen formaattiin. esim 1000ms -> 00:00:01.00.

Antti Laaksonen [03.02.2004 16:04:49]

#

Tässä on funktio, joka palauttaa tuollaisen merkkijonon annetusta ajasta.

'palauttaa millisekunteina annetun ajan muodossa tt:mm:ss.xx
Function MuotoileAika(ByVal aika As Long) As String
    Dim t, m, s, ms As Long
    s = aika \ 1000
    ms = aika - s * 1000
    t = s \ 3600
    s = s - t * 3600
    m = s \ 60
    s = s - m * 60
    Return LisaaNolla(t, 2) & ":" & LisaaNolla(m, 2) & ":" & _
           LisaaNolla(s, 2) & "." & LisaaNolla(ms, 3)
End Function

'tekee luvusta tietynpituisen merkkijonon, jossa
'on tarvittaessa nollia edellä
Function LisaaNolla(ByVal luku As Integer, ByVal pituus As Integer) As String
    Return luku.ToString.PadLeft(pituus, "0")
End Function

Funktion toiminta perustuu siihen, että sekunnissa on tuhat millisekuntia, tunnissa on 3600 sekuntia ja minuutissa on 60 sekuntia. Aikayksiköt saadaan erotettua kokonaislukujakolaskun avulla.

edit: parannuksia...

miiro [03.02.2004 16:11:17]

#

Nämä Vb6.0 näyttää punasena:

Return LisaaNolla(t) & ":" & LisaaNolla(m) & ":" & _
       LisaaNolla(s) & "." & LisaaNolla(ms)
Return "0" & luku
Return luku

Antti Laaksonen [03.02.2004 16:14:44]

#

Tuo ohjelma on tarkoitettu VB.NETiä varten, tässä on käännös VB6:lle.

'palauttaa millisekunteina annetun ajan muodossa tt:mm:ss.xx
Function MuotoileAika(aika As Long) As String
    Dim t as Long, m as Long, s as Long, ms As Long
    s = aika \ 1000
    ms = aika - s * 1000
    t = s \ 3600
    s = s - t * 3600
    m = s \ 60
    s = s - m * 60
    MuotoileAika = LisaaNolla(t, 2) & ":" & LisaaNolla(m, 2) & ":" & _
                   LisaaNolla(s, 2) & "." & LisaaNolla(ms, 3)
End Function

'tekee luvusta tietynpituisen merkkijonon, jossa
'on tarvittaessa nollia edellä
Function LisaaNolla(luku As Integer, pituus As Integer) As String
    LisaaNolla = Right(String(pituus, "0") & luku, pituus)
End Function

miiro [03.02.2004 16:18:02]

#

kiitos

miiro [03.02.2004 16:20:34]

#

oon muuten vähän tyhmä, en jaksa miettiä, eli miten tätä käytetään esim. ajanottokellona...

Antti Laaksonen [03.02.2004 16:25:56]

#

No vaikkapa siten, että laitat formille kaksi nappia (Command1 ja Command2) sekä ajastimen (Timer1). Napeista ensimmäinen käynnistää ajastimen ja toinen sulkee. Aikaero lasketaan Timer-funktion avulla, joka palauttaa tietokoneen käynnistämisestä kuluneen ajan sekunteina. Ajastin sitten näyttää päällä ollessaan tuon ajan esim. ikkunan otsikkopalkissa. Tässä on vähän koodia (edellisen funktion täytyy olla mukana):

Dim alku As Long

Private Sub Command1_Click()
    alku = Timer
    Timer1.Interval = 10 'päivitys teoriassa sata kertaa sekunnissa
End Sub

Private Sub Command2_Click()
    Timer1.Interval = 0
End Sub

Private Sub Timer1_Timer()
    Caption = MuotoileAika((Timer - alku) * 1000)
End Sub

miiro [03.02.2004 16:34:21]

#

se valittaa

MuotoileAika = LisaaNolla(t, 2) & ":" & LisaaNolla(m, 2) & ":" & _
               LisaaNolla(s, 2) & "." & LisaaNolla(ms, 3)

hommassa tota (t, 2):sen t:tä, pitääkö toi vai laittaa moduuliin

miiro [03.02.2004 16:35:06]

#

paitsi että valittaa sillonkin :(

Antti Laaksonen [03.02.2004 16:49:44]

#

No siinäpä onkin virhe. Ratkaisu on laittaa joko kaikkien LisaaNolla-funktiokutsujen ensimmäinen parametri sulkeisiin tai sitten muuttaa LisaaNolla-funktion määrittelyä. Eli joko näin:

MuotoileAika = LisaaNolla((t), 2) & ":" & LisaaNolla((m), 2) & ":" & _
              LisaaNolla((s), 2) & "." & LisaaNolla((ms), 3)

Tai näin:

Function LisaaNolla(luku As Long, pituus As Integer) As String

Ongelma johtui siitä, että LisaaNolla-funktion luku-parametri oli Integer-tyyppinen kun taas MuotoileAika-funktion muuttujat olivat Long-tyyppisiä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta