Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failed to create ZonedDateTime range in Julia 1.9.2 #440

Open
JakubPorubcansky opened this issue Jul 31, 2023 · 1 comment
Open

Failed to create ZonedDateTime range in Julia 1.9.2 #440

JakubPorubcansky opened this issue Jul 31, 2023 · 1 comment

Comments

@JakubPorubcansky
Copy link

JakubPorubcansky commented Jul 31, 2023

In Julia 1.7.3, the following code is working

julia> using Dates, TimeZones

julia> range(ZonedDateTime(2007, 03, 24, tz"Europe/Budapest"), length=6, step=Hour(1))
ZonedDateTime(2007, 3, 24, tz"Europe/Budapest"):Hour(1):ZonedDateTime(2007, 3, 24, 5, tz"Europe/Budapest")

julia> versioninfo()
Julia Version 1.7.3
Commit 742b9abb4d (2022-05-06 12:58 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-12.0.1 (ORCJIT, skylake)

(@v1.7) pkg> status TimeZones
      Status `C:\Users\jakub\.julia\environments\v1.7\Project.toml`
  [f269a46b] TimeZones v1.11.0

but after upgrading to Julia 1.9.2, it does not work anymore

julia> using Dates, TimeZones

julia> range(ZonedDateTime(2007, 03, 24, tz"Europe/Budapest"), length=6, step=Hour(1))
Error showing value of type StepRangeLen{ZonedDateTime, ZonedDateTime, Hour, Int64}:
ERROR: MethodError: no method matching ZonedDateTime(::ZonedDateTime)

Closest candidates are:
  ZonedDateTime(::Union{Period, TimeZone}...)
   @ TimeZones C:\Users\jakub\.julia\packages\TimeZones\miNCa\src\types\zoneddatetime.jl:136
  ZonedDateTime(::AbstractString)
   @ TimeZones C:\Users\jakub\.julia\packages\TimeZones\miNCa\src\parse.jl:86
  ZonedDateTime(::AbstractString, ::AbstractString; locale)
   @ TimeZones C:\Users\jakub\.julia\packages\TimeZones\miNCa\src\parse.jl:100
  ...

Stacktrace:
  [1] unsafe_getindex(r::StepRangeLen{ZonedDateTime, ZonedDateTime, Hour, Int64}, i::Int64)
    @ Base .\range.jl:948
  [2] first(r::StepRangeLen{ZonedDateTime, ZonedDateTime, Hour, Int64})
    @ Base .\range.jl:826
  [3] show(io::IOContext{Base.TTY}, r::StepRangeLen{ZonedDateTime, ZonedDateTime, Hour, Int64})
    @ Base .\range.jl:0
  [4] show(io::IOContext{Base.TTY}, #unused#::MIME{Symbol("text/plain")}, r::StepRangeLen{ZonedDateTime, ZonedDateTime, Hour, Int64})
    @ Base .\show.jl:13
  [5] (::OhMyREPL.var"#7#8"{REPL.REPLDisplay{REPL.LineEditREPL}, MIME{Symbol("text/plain")}, Base.RefValue{Any}})(io::IOContext{Base.TTY})
    @ OhMyREPL C:\Users\jakub\.julia\packages\OhMyREPL\zRJyJ\src\output_prompt_overwrite.jl:23
  [6] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:557
  [7] display
    @ C:\Users\jakub\.julia\packages\OhMyREPL\zRJyJ\src\output_prompt_overwrite.jl:6 [inlined]
  [8] display
    @ C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:281 [inlined]
  [9] display(x::Any)
    @ Base.Multimedia .\multimedia.jl:340
 [10] #invokelatest#2
    @ .\essentials.jl:816 [inlined]
 [11] invokelatest
    @ .\essentials.jl:813 [inlined]
 [12] print_response(errio::IO, response::Any, show_value::Bool, have_color::Bool, specialdisplay::Union{Nothing, AbstractDisplay})
    @ REPL C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:305
 [13] (::REPL.var"#57#58"{REPL.LineEditREPL, Pair{Any, Bool}, Bool, Bool})(io::Any)
    @ REPL C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:287
 [14] with_repl_linfo(f::Any, repl::REPL.LineEditREPL)
    @ REPL C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:557
 [15] print_response(repl::REPL.AbstractREPL, response::Any, show_value::Bool, have_color::Bool)
    @ REPL C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:285
 [16] (::REPL.var"#do_respond#80"{Bool, Bool, REPL.var"#93#103"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
    @ REPL C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:899
 [17] #invokelatest#2
    @ .\essentials.jl:816 [inlined]
 [18] invokelatest
    @ .\essentials.jl:813 [inlined]
 [19] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
    @ REPL.LineEdit C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\LineEdit.jl:2647
 [20] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
    @ REPL C:\Users\jakub\AppData\Local\Programs\Julia-1.9.2\share\julia\stdlib\v1.9\REPL\src\REPL.jl:1300
 [21] (::REPL.var"#62#68"{REPL.LineEditREPL, REPL.REPLBackendRef})()
    @ REPL .\task.jl:514

julia> versioninfo()
Julia Version 1.9.2
Commit e4ee485e90 (2023-07-05 09:39 UTC)
Platform Info:
  OS: Windows (x86_64-w64-mingw32)
  CPU: 4 × Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-14.0.6 (ORCJIT, skylake)
  Threads: 1 on 4 virtual cores
Environment:
  JULIA_IMAGE_THREADS = 1

(@v1.9) pkg> status TimeZones
Status `C:\Users\jakub\.julia\environments\v1.9\Project.toml`
  [f269a46b] TimeZones v1.11.0
@omus
Copy link
Member

omus commented Aug 7, 2023

Thanks for the bug report. The issue isn't actually with creating the range but from using first on the created range when show is called. In particular in Julia 1.7 the code you posted creates a StepRange while on Julia 1.8+ the same code now creates a StepRangeLen. I've been unable to track down the exact base Julia change as some of the 1.8.0-DEV commits aren't rebuilding cleanly.

In any case the fix is easy enough to define identity constructor ZonedDateTime(zdt::ZonedDateTime) = zdt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants