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

时间:2016-06-22 14:54:28

标签: 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

1 个答案:

答案 0 :(得分:6)

来自docs

  

Date模块提供两种类型来处理日期: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 。将其限制为三位小数有效:

DateTime

更简洁地说,Millisecond无法处理julia> Base.Dates.Millisecond(111) 111 milliseconds julia> Base.Dates.Millisecond(111.1) ERROR: InexactError() in call at dates/types.jl:18 的分数:

{{1}}