Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing Zulu dates in Julia throws InexactError

Tags:

datetime

julia

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
like image 340
Tomas Aschan Avatar asked Jun 22 '16 14:06

Tomas Aschan


Video Answer


1 Answers

From the docs:

The Dates module provides two types for working with dates: Date and DateTime, 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
like image 76
Chris Avatar answered Sep 17 '22 20:09

Chris