SASLib.jl
SASLib.jl copied to clipboard
Timestamp data should be more precise
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
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.