# Truncating conversion to days

**URL:** https://discourse.julialang.org/t/truncating-conversion-to-days/72694
**Category:** Internals & Design
**Tags:** dates
**Created:** [December 7, 2021, 4:03am UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694 "2021-12-07T04:03:14Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)
#### Post date: [December 7, 2021, 4:03am UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694/1 "2021-12-07T04:03:14Z")

</div>

```julia
julia> Dates.days(Hour(1))
0

julia> Dates.days(Year(1))
365.2425

```

One of these truncates and one does not. What is the rationale behind this distinction?

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [December 7, 2021, 4:18am UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694/2 "2021-12-07T04:18:57Z")

</div>

```julia
julia> Dates.days(Minute(1))
0

julia> Dates.days(Month(1))
30.436875

```

Hour \< Day, Year \> Day

---

<div class="post-metadata">

### Author: ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)
#### Post date: [December 7, 2021, 4:23am UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694/3 "2021-12-07T04:23:24Z")

</div>

Right. Why is that distinction useful? It seems more natural to me that I’d want to round down in both cases or neither.

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [December 7, 2021, 4:25am UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694/4 "2021-12-07T04:25:53Z")

</div>

“how many days are there in a minute?” “0”

it’s not doing this:

```julia
julia> convert(Day, Minute(1))
ERROR: InexactError: divexact(Int64, 0.0006944444444444445)

julia> convert(Minute, Day(1))
1440 minutes

```

which gives you error explicitly if doesn’t convert

---

<div class="post-metadata">

### Author: ![jzr](https://avatars.discourse-cdn.com/v4/letter/j/eb9ed0/32.png) [@jzr](https://discourse.julialang.org/u/jzr)
#### Post date: [December 7, 2021, 4:28am UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694/5 "2021-12-07T04:28:58Z")

</div>

Why round down in the \>0 case but not the \>1 case?  
Or, why return a fractional answer in the \>1 case but not the \>0 case?

---

<div class="post-metadata">

### Author: ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)
#### Post date: [December 7, 2021, 10:00am UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694/6 "2021-12-07T10:00:35Z")

</div>

Indeed, this seems inconsistent and it could also provide a fraction of days for units smaller than a period of one day but in the source code it is currently defined as:

```julia
days(c::Millisecond) = div(value(c),86400000)
days(c::Second) = div(value(c),86400)
days(c::Minute) = div(value(c),1440)
days(c::Hour) = div(value(c),24)

```

With the current logic, the following is false (_distributive property breaks_):

```julia
days(Minute(12*60)) + days(Minute(12*60)) == days(Minute(24*60))

```

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [December 7, 2021, 9:20pm UTC](https://discourse.julialang.org/t/truncating-conversion-to-days/72694/7 "2021-12-07T21:20:44Z")

</div>

> [@rafael.guerra](#):
>
> ( _distributive property breaks_ ):

don’t really see why asking:

> how many Days are there in \_\_\_

should be distributive in the first place, not all functions that give you numbers should be anyway

```julia
julia> floor(0.8) + floor(0.8) == floor(1.6)
false

```

I think either way would be fine by me, the current behavior is not bad IMO.
