edatl
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
11:41 AM
Get Milliseconds from Local Time
I am trying to get the miliseconds from the date time object. I suspect it's something to do with type casting but not sure. I'm using the asSeconds() function to get the seconds and then multiplying by 1000. I'm getting some weird results:
Telnet results. I'm not sure why I am getting -58130832 as this should be positive. Any help would be appreciated. Thanks!
start time seconds: 1361446502
Integer
-58130832
Integer
-50930832
start_time = CreateObject("roDateTime")
start_time.Mark()
start_time.ToLocalTime()
start_time_seconds = CreateObject("roInt")
start_time_miliseconds = CreateObject("roInt")
'convert to miliseconds'
start_time_seconds = start_time.asSeconds()
print "start time seconds: " + itostr(start_time_seconds)
start_time_miliseconds = start_time_seconds * 1000
print type(start_time_miliseconds)
print tostr(start_time_miliseconds)
end_time_miliseconds = CreateObject("roInt")
end_time_miliseconds = (1 * 3600000) + start_time_miliseconds
print type(end_time_miliseconds)
print itostr(end_time_miliseconds)
Telnet results. I'm not sure why I am getting -58130832 as this should be positive. Any help would be appreciated. Thanks!
start time seconds: 1361446502
Integer
-58130832
Integer
-50930832
7 REPLIES 7

RokuMarkn
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
11:53 AM
Re: Get Milliseconds from Local Time
asSeconds returns an integer. The current time (seconds from the Unix epoch) is about 1361404800 (one billion). If you multiply this by 1000 you will overflow a 32 bit integer and get nonsense results. You can solve this by using an explict floating point variable:
A couple of other comments about your code:
Pre-creating the variables with CreateObject is not necessary. You can omit the two "roInt" creations.
Converting a time to local time is almost always a bad idea, unless it's for display purposes. Twice a year, local time has discontinuities due to DST. GMT time does not have this problem.
--Mark
start_time_seconds = start_time.asSeconds()
start_time_miliseconds# = start_time_seconds * 1000
A couple of other comments about your code:
Pre-creating the variables with CreateObject is not necessary. You can omit the two "roInt" creations.
Converting a time to local time is almost always a bad idea, unless it's for display purposes. Twice a year, local time has discontinuities due to DST. GMT time does not have this problem.
--Mark
edatl
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
12:10 PM
Re: Get Milliseconds from Local Time
Thank you for your response. I ran the changes and I am still getting an error :
The print statement print type(start_time_miliseconds) comes back with <uninitialized> as the output.
I have removed local time as stated.
start_time = CreateObject("roDateTime")
start_time.Mark()
'start_time.ToLocalTime()
'convert to miliseconds'
start_time_seconds = start_time.asSeconds()
print "start time seconds: " + itostr(start_time_seconds)
start_time_miliseconds# = start_time_seconds * 1000
print type(start_time_miliseconds)
print Str(start_time_miliseconds)
end_time_miliseconds# = (hours * 3600000) + start_time_miliseconds
print Str(end_time_miliseconds)
Use of uninitialized variable. (runtime error &he9) in ...9S0W/pkg:/source/smsUtils.brs(205)
205: print Str(start_time_miliseconds)
The print statement print type(start_time_miliseconds) comes back with <uninitialized> as the output.
I have removed local time as stated.

RokuMarkn
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
12:28 PM
Re: Get Milliseconds from Local Time
The # at the end is part of the variable name. You've omitted it in a couple of places, including the print statement. In other words, start_time_milliseconds and start_time_milliseconds# are two different variables.
--Mark
--Mark
edatl
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
12:47 PM
Re: Get Milliseconds from Local Time
Thank you again for your quick response, almost there I hope!
I am still getting a negative number returned with the exponential notation. What am I doing wrong here? Also, once I get the correct value, how can I output a string that will not have the exponential notation and just the regular number? Str() does not seem to be the way.
start_time = CreateObject("roDateTime")
start_time.Mark()
'start_time.ToLocalTime()
'convert to miliseconds'
start_time_seconds = start_time.asSeconds()
print "start time seconds: " + itostr(start_time_seconds)
start_time_miliseconds# = start_time_seconds * 1000
print type(start_time_miliseconds#)
print Str(start_time_miliseconds#)
end_time_miliseconds# = (2 * 3600000) + start_time_miliseconds#
print Str(end_time_miliseconds#)
start time seconds: 1361479201
Double
-2.543183e+07
-1.823183e+07
I am still getting a negative number returned with the exponential notation. What am I doing wrong here? Also, once I get the correct value, how can I output a string that will not have the exponential notation and just the regular number? Str() does not seem to be the way.

RokuMarkn
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
02:07 PM
Re: Get Milliseconds from Local Time
Sorry, my code wasn't quite right. You need to convert to a float before you do the multiply, otherwise it does an integer multiply and still overflows. So start_time_seconds should also be changed to have a # at the end.
To print a float, just say "print variable". No need to use Str.
--Mark
To print a float, just say "print variable". No need to use Str.
--Mark
edatl
Visitor
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
02:31 PM
Re: Get Milliseconds from Local Time
Thank you Mark, this worked great!
Now if I want to put the float into a string, I used Str() and it gave me the exponential notation.
get_string$ = "?user=1&" + Str(float_value#)
1.361486e+12
Is there a way I can use do this without writing a function to regex and add the correct number of zeros?
Now if I want to put the float into a string, I used Str() and it gave me the exponential notation.
get_string$ = "?user=1&" + Str(float_value#)
1.361486e+12
Is there a way I can use do this without writing a function to regex and add the correct number of zeros?
renojim
Community Streaming Expert
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-21-2013
05:54 PM
Re: Get Milliseconds from Local Time
Unless Mark points one out, I don't think there's a Double-to-String function. Here's one I whipped up quickly:
Barely tested, so caveat emptor.
-JT
Function DoubleToString(x# as Double) as String
onemill# = 1000000
xhi = Int(x#/onemill#).toStr()
xlo = Int((x#-onemill#*Int(x#/onemill#))).toStr()
xlo = String(6-xlo.Len(),"0") + xlo
return xhi+xlo
End Function
Barely tested, so caveat emptor.
-JT
Roku Community Streaming Expert
Help others find this answer and click "Accept as Solution."
If you appreciate my answer, maybe give me a Kudo.
I am not a Roku employee.
Help others find this answer and click "Accept as Solution."
If you appreciate my answer, maybe give me a Kudo.
I am not a Roku employee.