I'm writing a little program for personal use. Its very small.Its just a timer that shows how many days my computer has been on and writes the result to a text file every 10secs. Well I count seconds and convert them to the following format xdaysxhoursxminutesxseconds.I compiled it and everything run fine for some time and after that I get an overflow error. When I check the text file it says 2h17s.
The seconds are in a variable of type Long.
So if I need to run the program for about a year, what is the workaround?
I have this in a module
These are the variables that I use in my form
And on form load timStart = Time
And in my timer
Many thanks.
The seconds are in a variable of type Long.
So if I need to run the program for about a year, what is the workaround?
I have this in a module
Code:
Option Explicit
' Duration
' By Quentin Zervaas [zervaas@strangeness.org]
' Use at will! Works as well as (better!) than mIRC's
' $duration function
' since it gives you multiple output options
' It's pretty easy to add more of your own
'depending on how you want it.
'
' Just add new cases, and define the strings accordingly
'(remember to allow spaces too.
Public Function Duration(TotalSeconds As Long, UpFormat As _
Integer) As String
' Format = 0, 1, 2
' This determines the format of the time to be returned
' Type 0: 1d 4h 15m 47s
' Type 1: 1 day, 4:15:47
' Type 2: 1 day 4hrs 15mins 47secs
' Type else: Defaults to type 0
Dim Seconds
Dim Minutes
Dim Hours
Dim Days
Dim DayString As String
Dim HourString As String
Dim MinuteString As String
Dim SecondString As String
Seconds = Int(TotalSeconds Mod 60)
Minutes = Int(TotalSeconds \ 60 Mod 60)
Hours = Int(TotalSeconds \ 3600 Mod 24)
Days = Int(TotalSeconds \ 3600 \ 24)
Select Case UpFormat
Case 0
DayString = "d"
HourString = "h"
MinuteString = "m"
SecondString = "s"
Case 1
If Days = 1 Then DayString = " day, " _
Else: DayString = " days, "
HourString = ":"
MinuteString = ":"
SecondString = ""
Case 2
If Days = 1 Then DayString = " day " _
Else: DayString = " days, "
If Hours = 1 Then HourString = "hr " _
Else: HourString = "hrs "
If Minutes = 1 Then MinuteString = "min " _
Else: MinuteString = "mins "
If Seconds = 1 Then SecondString = "sec " _
Else: SecondString = "secs"
Case Else
DayString = "d "
HourString = "h "
MinuteString = "m "
SecondString = "s"
End Select
Select Case Days
Case 0
Duration = Format(Hours, "0") & HourString & _
Format(Minutes, "00") & MinuteString & _
Format(Seconds, "00") & SecondString
Case Else
Duration = Days & DayString & _
Format(Hours, "0") & HourString & Format _
(Minutes, "00") & MinuteString & _
Format(Seconds, "00") & SecondString
End Select
End Function
These are the variables that I use in my form
Code:
Dim timStart As Date
Dim displayTime As String
Dim arr() As String
Dim intSeconds As Long
And on form load timStart = Time
And in my timer
Code:
Static intWrite As Byte
intWrite = intWrite + 1
If intWrite > 10 Then
intWrite = 0
WriteResult Label1.Caption 'Write Result is a function that writes the caption of label1 to a text file
End If
displayTime = Right("00" & Hour(Time - timStart), 2) & ":" & Right("00" & Minute(Time - timStart), 2) & ":" & Right("00" & Second(Time - timStart), 2)
arr() = Split(displayTime, ":")
intSeconds = CInt(arr(0) * 60 * 60) + CInt(arr(1) * 60) + CInt(arr(2))
Me.Caption = displayTime
Label1.Caption = Duration(intSeconds, 0)
Many thanks.