I'm trying to parse a list of log dates to DateTime
instances, but it throws inexact 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, "y-m-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
From the docs:
The
Date
s module provides two types for working with dates:Date
andDateTime
, representing day and millisecond precision, respectively;
(emphasis added).
So, it seems rather than rounding, DateTime
throws an InexactError
when parsing a timestamp with more than three decimal places. Restricting it to three decimal places works:
julia> t = "2016-06-22T14:04:22.6615594Z"
"2016-06-22T14:04:22.6615594Z"
julia> DateTime(t,"y-m-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,"y-m-dTH:M:S.sZ")
2016-06-22T14:04:22.662
More concisely, DateTime
cannot handle fractions 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With