2016-06-22 22 views
5

Tôi đang cố gắng phân tích danh sách các ngày đăng nhập thành DateTime trường hợp, nhưng nó ném lỗi không chính xác. Tôi đang làm gì sai và tôi nên làm như thế nào?Phân tích ngày Zulu trong Julia ném 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 

Trả lời

6

Từ docs:

Các Date s mô-đun cung cấp hai loại để làm việc với ngày: DateDateTime, đại diện cho ngày và millisecond chính xác, tương ứng;

(được thêm vào).

Vì vậy, có vẻ như không phải làm tròn, DateTime ném số InexactError khi phân tích cú pháp dấu thời gian có nhiều hơn ba chữ số thập phân. Hạn chế nó để ba chữ số thập phân hoạt động:

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 

ngắn gọn hơn, DateTime không thể xử lý các phần phân đoạn của một Millisecond:

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

julia> Base.Dates.Millisecond(111.1) 
ERROR: InexactError() 
in call at dates/types.jl:18 
+0

Cảm ơn - đó giải thích tại sao * * điều này xảy ra. Cách tốt nhất để phân tích cú pháp tệp nhật ký của tôi là gì? –

+2

Làm tròn [đang đến] (https://github.com/JuliaLang/julia/pull/17037). – daycaster

+0

@daycaster tuyệt vời, tốt để biết! – Chris

Các vấn đề liên quan