eli millisekunneista pitäisi aika saada kyseiseen formaattiin. esim 1000ms -> 00:00:01.00.
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...
Nämä Vb6.0 näyttää punasena:
Return LisaaNolla(t) & ":" & LisaaNolla(m) & ":" & _ LisaaNolla(s) & "." & LisaaNolla(ms)
Return "0" & luku
Return luku
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
kiitos
oon muuten vähän tyhmä, en jaksa miettiä, eli miten tätä käytetään esim. ajanottokellona...
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
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
paitsi että valittaa sillonkin :(
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ä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.