Creating timestamps with sub-second accuracy
Anonym
The TIMESTAMP function in IDL is good when you need to write log files and chronologically sort entries from multiple files. However, a common problem is that the number of digits is not enough when code runs quickly. This alternative routine shows how to improve timestamps into fractions of seconds. On Windows,"systime" is normally limited to about 1ms. But on Linux the accuracy can be closer to 1 microsecond.
Here is a comparison of the standard TIMESTAMP function and the output from the improved accuracy TIMESTAMP2 function.
ENVI> print,(t=timestamp()) & for i=0, 299 do if t ne timestamp() then print, (t=timestamp())
2014-08-27T21:31:30.00004827976228Z
ENVI> print,(t=timestamp2()) & for i=0, 299 do if t ne timestamp2() then print, (t=timestamp2())
2014-08-27T21:31:41.808
2014-08-27T21:31:41.809
2014-08-27T21:31:41.810
2014-08-27T21:31:41.811
2014-08-27T21:31:41.812
2014-08-27T21:31:41.813
2014-08-27T21:31:41.814
2014-08-27T21:31:41.815
2014-08-27T21:31:41.816
2014-08-27T21:31:41.817
For TIMESTAMP2 the update rate is about 1ms running on a Windows 7 OS in this case. The following is a listing of the source code for the TIMESTAMP2 function:
function timestamp2
compile_opt idl2,logical_predicate
t = systime(1)
str = systime(0, floor(t), /utc)
td = 0d
reads, str, td, format='(c())'
td += (t-floor(t))/(24*3600d)
tstr = string(td, format='(c(cyi4.4,"-",cmoi2.2,"-",cdi2.2,"T",cHi2.2,":",cmi2.2,":",csf06.3))')
return, tstr
end