Zulu's thoughts date back to Julia throws an InexactError

I am trying to parse a list of log dates for DateTime instances, but it throws inaccurate errors. What am I doing wrong, and how should I do it right?

 julia> using Base.DateTime julia> readdlm("push-log.txt")[:,1] 16-element Array{Any,1}: "2016-06-22T14:04:09.9896422Z" "2016-06-22T14:04:10.0052910Z" "2016-06-22T14:04:11.3177753Z" "2016-06-22T14:04:12.3334265Z" "2016-06-22T14:04:13.4896544Z" "2016-06-22T14:04:14.1459007Z" "2016-06-22T14:04:14.6459071Z" "2016-06-22T14:04:15.6615276Z" "2016-06-22T14:04:16.2084073Z" "2016-06-22T14:04:17.2865371Z" "2016-06-22T14:04:18.3490382Z" "2016-06-22T14:04:19.2396584Z" "2016-06-22T14:04:19.7709572Z" "2016-06-22T14:04:20.9584180Z" "2016-06-22T14:04:22.0209160Z" "2016-06-22T14:04:22.6615594Z" julia> map(readdlm("push-log.txt")[:,1]) do str DateTime(str, "ym-dTH:M:S.sZ") end ERROR: InexactError() in slotparse at dates/io.jl:131 in getslot at dates/io.jl:143 in parse at dates/io.jl:158 in anonymous at none:2 in map at essentials.jl:153 julia> versioninfo() Julia Version 0.4.6 Commit 2e358ce (2016-06-19 17:16 UTC) Platform Info: System: Windows (x86_64-w64-mingw32) CPU: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz WORD_SIZE: 64 BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Haswell) LAPACK: libopenblas64_ LIBM: libopenlibm LLVM: libLLVM-3.3 
+5
source share
1 answer

From docs :

The Date module provides two types for working with dates: Date and DateTime , representing the day and millisecond precision , respectively;

(in italics).

So, rather than rounding, a DateTime throws an InexactError when parsing a timestamp with more than three decimal places. Limiting to three decimal places works:

 julia> t = "2016-06-22T14:04:22.6615594Z" "2016-06-22T14:04:22.6615594Z" julia> DateTime(t,"ym-dTH:M:S.sZ") ERROR: InexactError() in slotparse at dates/io.jl:131 in getslot at dates/io.jl:143 in parse at dates/io.jl:158 julia> t2 = "2016-06-22T14:04:22.662Z" "2016-06-22T14:04:22.662Z" julia> DateTime(t2,"ym-dTH:M:S.sZ") 2016-06-22T14:04:22.662 

More succinctly, DateTime cannot handle shares of a Millisecond :

 julia> Base.Dates.Millisecond(111) 111 milliseconds julia> Base.Dates.Millisecond(111.1) ERROR: InexactError() in call at dates/types.jl:18 
+6
source

All Articles