2016-06-22 3 views
5

Я пытаюсь разобрать список дат журнала до DateTime экземпляров, но он выдает неточные ошибки. Что я делаю неправильно, и как я должен делать это правильно?Анализ Zulu даты в Julia throws InexactError

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 

ответ

6

От docs:

В Date сек модуль обеспечивает два типа для работы с датами: Date и DateTime, представляя день и миллисекунды точность, соответственно;

(выделено мной).

Так, кажется, вместо округления 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 
+0

Спасибо - что объясняет, почему * * это происходит. Каков наилучший способ разобрать мой файл журнала? –

+2

Округление [приближается] (https://github.com/JuliaLang/julia/pull/17037). – daycaster

+0

@daycaster отлично, приятно знать! – Chris

Смежные вопросы