Skip to content

Commit 23dad52

Browse files
committed
Introduce method to convert to Time from TimeType
This is to satisfy the expectation that `Time(t::Time) == t`, similar to other subtypes of TimeType and Period. This also resolves issues ranges of Time, such as given by `range(Time(0), step=Hour(1), length=24)`.
1 parent d7c70bc commit 23dad52

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

stdlib/Dates/src/conversions.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ DateTime(dt::TimeType) = convert(DateTime, dt)
2525
Convert a `DateTime` to a `Time`. The hour, minute, second, and millisecond parts of
2626
the `DateTime` are used to create the new `Time`. Microsecond and nanoseconds are zero by default.
2727
"""
28-
Time(dt::DateTime) = convert(Time, dt)
28+
Time(dt::TimeType) = convert(Time, dt)
2929

3030
Base.convert(::Type{DateTime}, dt::Date) = DateTime(UTM(value(dt) * 86400000))
3131
Base.convert(::Type{Date}, dt::DateTime) = Date(UTD(days(dt)))

stdlib/Dates/test/conversions.jl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,4 +129,18 @@ end
129129
@test Dates.nanosecond(t) == 0
130130
end
131131

132+
@testset "idempotency of conversion for TimeType subtypes" begin
133+
for T in [DateTime, Date, Time]
134+
@test T(T(0)) == T(0)
135+
end
136+
end
137+
138+
@testset "idempotency of conversion for Period subtypes" begin
139+
for T in [Nanosecond, Millisecond,
140+
Second, Minute, Hour,
141+
Day, Week, Month, Quarter, Year]
142+
@test T(T(0)) == T(0)
143+
end
144+
end
145+
132146
end

stdlib/Dates/test/ranges.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,8 @@ dr = Dates.Time(23, 1, 1):Dates.Second(1):Dates.Time(23, 2, 1)
539539
dr1 = Dates.Time(23, 1, 1):Dates.Second(1):Dates.Time(23, 1, 1)
540540
dr2 = Dates.Time(23, 1, 1):Dates.Second(1):Dates.Time(22, 2, 1) # empty range
541541
dr3 = Dates.Time(23, 1, 1):Dates.Minute(-1):Dates.Time(22, 1, 1) # negative step
542+
dr4 = range(Dates.Time(0), step=Dates.Hour(1), length=23) # by step, length
543+
542544
# Big ranges
543545
dr8 = typemin(Dates.Time):Dates.Second(1):typemax(Dates.Time)
544546
dr9 = typemin(Dates.Time):Dates.Nanosecond(1):typemax(Dates.Time)
@@ -555,7 +557,7 @@ dr18 = typemax(Dates.Time):Dates.Minute(-100):typemin(Dates.Time)
555557
dr19 = typemax(Dates.Time):Dates.Hour(-10):typemin(Dates.Time)
556558
dr20 = typemin(Dates.Time):Dates.Microsecond(2):typemax(Dates.Time)
557559

558-
drs = Any[dr, dr1, dr2, dr3, dr8, dr9, dr10,
560+
drs = Any[dr, dr1, dr2, dr3, dr4, dr8, dr9, dr10,
559561
dr11, dr12, dr13, dr14, dr15, dr16, dr17, dr18, dr19, dr20]
560562

561563
@test map(length, drs) == map(x->size(x)[1], drs)

0 commit comments

Comments
 (0)