SASLib.jl icon indicating copy to clipboard operation
SASLib.jl copied to clipboard

Timestamp data should be more precise

Open tk3369 opened this issue 8 years ago • 1 comments

This code could be improved as x[i] is a floating point value of # of seconds since epoch. By multiplying it by 1e3 or 1e6 would allow us to read the data as in millisecond/microseconds. Need to cross check what precision SAS can support.

# convert Float64 value into DateTime object 
function datetime_from_float(x::Vector{Float64})
    v = Vector{Union{DateTime, Missing}}(length(x))
    for i in 1:length(x)
        v[i] = isnan(x[i]) ? missing : (sas_datetime_origin + Dates.Second(round(Int64, x[i])))
    end
    v
end

tk3369 avatar Dec 29 '17 22:12 tk3369

Following up on this, I made a function that helped me, maybe it could be useful here. It only covers the case of Time columns (not DateTime)

seconds2time(t) = Time(Nanosecond(round(t,digits=9) * 1e9))
julia> seconds2time(34200)
09:30:00

julia> seconds2time(34200.0356466666)
09:30:00.035646667

I explicitly round it to nanoseconds because that is the smallest unit that the Dates.jl standard library supports. This is likely sufficient for most usage, I'd guess.

tbeason avatar May 18 '21 20:05 tbeason