在Julia中解析Zulu日期会引发InexactError

Tom*_*han 5 datetime julia

我正在尝试将日志日期列表解析为DateTime实例,但它会引发不准确的错误.我做错了什么,我该怎么做?

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
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 6

来自文档:

DateS模块提供两种类型的使用日期:DateDateTime,代表一天毫秒精度,分别;

(重点补充).

所以,它似乎而不是舍入,在解析时间戳超过三个小数位时DateTime抛出一个InexactError.将其限制为三位小数有效:

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
Run Code Online (Sandbox Code Playgroud)

更简洁,DateTime无法处理a的分数Millisecond:

julia> Base.Dates.Millisecond(111)
111 milliseconds

julia> Base.Dates.Millisecond(111.1)
ERROR: InexactError()
 in call at dates/types.jl:18
Run Code Online (Sandbox Code Playgroud)