From 075cf69bc06ae45ace89546efbff438f2849c6a7 Mon Sep 17 00:00:00 2001 From: Curtis Vogt Date: Fri, 3 Apr 2020 13:19:32 -0500 Subject: [PATCH] Support `eps` on `TimeType` types (#31487) * Support eps on TimeType types * Add news --- NEWS.md | 1 + stdlib/Dates/src/types.jl | 31 +++++++++++++++++++++++-------- stdlib/Dates/test/types.jl | 3 +++ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/NEWS.md b/NEWS.md index cb15f98beb1c3..a145cbb4c730f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -137,6 +137,7 @@ Standard library changes arrays. #### Dates +* The `eps` function now accepts `TimeType` types ([#31487]). #### Statistics diff --git a/stdlib/Dates/src/types.jl b/stdlib/Dates/src/types.jl index 9116b51a87eb7..d5eb7ca6e287b 100644 --- a/stdlib/Dates/src/types.jl +++ b/stdlib/Dates/src/types.jl @@ -374,17 +374,32 @@ calendar(dt::DateTime) = ISOCalendar calendar(dt::Date) = ISOCalendar """ - eps(::DateTime) -> Millisecond - eps(::Date) -> Day - eps(::Time) -> Nanosecond + eps(::Type{DateTime}) -> Millisecond + eps(::Type{Date}) -> Day + eps(::Type{Time}) -> Nanosecond + eps(::TimeType) -> Period -Returns `Millisecond(1)` for `DateTime` values, `Day(1)` for `Date` values, and `Nanosecond(1)` for `Time` values. +Return the smallest unit value supported by the `TimeType`. + +# Examples +```jldoctest +julia> eps(DateTime) +1 millisecond + +julia> eps(Date) +1 day + +julia> eps(Time) +1 nanosecond +``` """ -Base.eps +Base.eps(::Union{Type{DateTime}, Type{Date}, Type{Time}, TimeType}) + +Base.eps(::Type{DateTime}) = Millisecond(1) +Base.eps(::Type{Date}) = Day(1) +Base.eps(::Type{Time}) = Nanosecond(1) +Base.eps(::T) where T <: TimeType = eps(T)::Period -Base.eps(dt::DateTime) = Millisecond(1) -Base.eps(dt::Date) = Day(1) -Base.eps(t::Time) = Nanosecond(1) Base.typemax(::Union{DateTime, Type{DateTime}}) = DateTime(146138512, 12, 31, 23, 59, 59) Base.typemin(::Union{DateTime, Type{DateTime}}) = DateTime(-146138511, 1, 1, 0, 0, 0) diff --git a/stdlib/Dates/test/types.jl b/stdlib/Dates/test/types.jl index d4fe39d22a552..fefe14a20ec19 100644 --- a/stdlib/Dates/test/types.jl +++ b/stdlib/Dates/test/types.jl @@ -181,6 +181,9 @@ c = Dates.Time(0) @testset "DateTime traits" begin @test Dates.calendar(a) == Dates.ISOCalendar @test Dates.calendar(b) == Dates.ISOCalendar + @test eps(DateTime) == Dates.Millisecond(1) + @test eps(Date) == Dates.Day(1) + @test eps(Time) == Dates.Nanosecond(1) @test eps(a) == Dates.Millisecond(1) @test eps(b) == Dates.Day(1) @test eps(c) == Dates.Nanosecond(1)