-
Notifications
You must be signed in to change notification settings - Fork 7
Julia "Dates"
Alexander Belopolsky edited this page Sep 13, 2017
·
3 revisions
Let's write a simple function to explore subtypes
julia> function typetree(T, indent=0)
println(" "^indent, T)
for S in subtypes(T)
typetree(S, indent+1)
end
end
typetree (generic function with 2 methods)
julia> typetree(Dates.AbstractTime)
Base.Dates.AbstractTime
Base.Dates.Calendar
Base.Dates.ISOCalendar
Base.Dates.CompoundPeriod
Base.Dates.Instant
Base.Dates.UTInstant
Base.Dates.Period
Base.Dates.DatePeriod
Base.Dates.Day
Base.Dates.Month
Base.Dates.Week
Base.Dates.Year
Base.Dates.TimePeriod
Base.Dates.Hour
Base.Dates.Microsecond
Base.Dates.Millisecond
Base.Dates.Minute
Base.Dates.Nanosecond
Base.Dates.Second
Base.Dates.TimeType
Base.Dates.Time
Date
DateTime
AbstractTime
is at the top of the hierarchy and has no defined methods.
julia> methodswith(Dates.AbstractTime)
0-element Array{Method,1}
Is similar to Python's timedelta
or q timespan
. Addition and subtraction results in CompoundPeriod
:
julia> Dates.Day(2)+Dates.Hour(3)
2 days, 3 hours
julia> typeof(ans)
Base.Dates.CompoundPeriod
Period types are expected to have toms
method defined
julia> methods(Dates.toms)
# 11 methods for generic function "toms":
toms(c::Base.Dates.CompoundPeriod) in Base.Dates at dates/periods.jl:460
toms(c::Base.Dates.Year) in Base.Dates at dates/periods.jl:459
toms(c::Base.Dates.Month) in Base.Dates at dates/periods.jl:458
toms(c::Base.Dates.Week) in Base.Dates at dates/periods.jl:457
toms(c::Base.Dates.Day) in Base.Dates at dates/periods.jl:456
toms(c::Base.Dates.Hour) in Base.Dates at dates/periods.jl:455
toms(c::Base.Dates.Minute) in Base.Dates at dates/periods.jl:454
toms(c::Base.Dates.Second) in Base.Dates at dates/periods.jl:453
toms(c::Base.Dates.Millisecond) in Base.Dates at dates/periods.jl:452
toms(c::Base.Dates.Microsecond) in Base.Dates at dates/periods.jl:451
toms(c::Base.Dates.Nanosecond) in Base.Dates at dates/periods.jl:450
eps
should be defined for types rather than instances. Something like this:
eps(t::AbstractTime) = eps(typeof(t))
eps(::Type{Date}) = Day(1)
..
Compare temporal and numeric types below.
julia> methods(eps)
# 9 methods for generic function "eps":
eps(t::Base.Dates.Time) in Base.Dates at dates/types.jl:331
eps(dt::Date) in Base.Dates at dates/types.jl:330
eps(dt::DateTime) in Base.Dates at dates/types.jl:329
eps() in Base at float.jl:715
eps(x::AbstractFloat) in Base at float.jl:711
eps(::Type{Float16}) in Base at float.jl:712
eps(::Type{Float32}) in Base at float.jl:713
eps(::Type{Float64}) in Base at float.jl:714
eps(::Type{BigFloat}) in Base.MPFR at mpfr.jl:854