Skip to content

Commit be1f3ab

Browse files
authored
Merge pull request #37391 from cfitz25/canonicalize-Period
Added canonicalize for Periods
2 parents 0a04f41 + f83e8b7 commit be1f3ab

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ Standard library changes
174174
#### Dates
175175

176176
* `Quarter` period is defined ([#35519]).
177+
* `canonicalize` can now take `Period` as an input ([#37391])
177178
* Zero-valued `FixedPeriod`s and `OtherPeriod`s now compare equal, e.g.,
178179
`Year(0) == Day(0)`. The behavior of non-zero `Period`s is not changed. ([#37486])
179180

stdlib/Dates/src/periods.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ julia> Dates.canonicalize(Dates.CompoundPeriod(Dates.Minute(50000)))
250250
4 weeks, 6 days, 17 hours, 20 minutes
251251
```
252252
"""
253+
canonicalize(x::Period) = canonicalize(CompoundPeriod(x))
253254
function canonicalize(x::CompoundPeriod)
254255
# canonicalize Periods by pushing "overflow" into a coarser period.
255256
p = x.periods

stdlib/Dates/test/periods.jl

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,18 @@ end
380380
@test Dates.Date(2009, 2, 1) - (Dates.Month(1) + Dates.Day(1)) == Dates.Date(2008, 12, 31)
381381
@test_throws MethodError (Dates.Month(1) + Dates.Day(1)) - Dates.Date(2009,2,1)
382382
end
383+
384+
@testset "canonicalize Period" begin
385+
# reduce individual Period into most basic CompoundPeriod
386+
@test Dates.canonicalize(Dates.Nanosecond(1000000)) == Dates.canonicalize(Dates.Millisecond(1))
387+
@test Dates.canonicalize(Dates.Millisecond(1000)) == Dates.canonicalize(Dates.Second(1))
388+
@test Dates.canonicalize(Dates.Second(60)) == Dates.canonicalize(Dates.Minute(1))
389+
@test Dates.canonicalize(Dates.Minute(60)) == Dates.canonicalize(Dates.Hour(1))
390+
@test Dates.canonicalize(Dates.Hour(24)) == Dates.canonicalize(Dates.Day(1))
391+
@test Dates.canonicalize(Dates.Day(7)) == Dates.canonicalize(Dates.Week(1))
392+
@test Dates.canonicalize(Dates.Month(12)) == Dates.canonicalize(Dates.Year(1))
393+
@test Dates.canonicalize(Dates.Minute(24*60*1 + 12*60)) == Dates.canonicalize(Dates.CompoundPeriod([Dates.Day(1),Dates.Hour(12)]))
394+
end
383395
@testset "unary ops and vectorized period arithmetic" begin
384396
pa = [1y 1m 1w 1d; 1h 1mi 1s 1ms]
385397
cpa = [1y + 1s 1m + 1s 1w + 1s 1d + 1s; 1h + 1s 1mi + 1s 2m + 1s 1s + 1ms]
@@ -493,3 +505,4 @@ end
493505
end
494506

495507
end
508+

0 commit comments

Comments
 (0)