Good point Wojtek. Unfortunately this concern also applies to hours and seconds, which can change between calendars. I believe seconds today already operates as ISO seconds, so I would just document that all units are ISO units.
On Wed, Jun 3, 2020 at 9:14 AM Wojtek Mach <[email protected]> wrote: > > Just a word of warning, I believe that while supporting minutes, hours, > and days is rather trivial since we have such fields on the structs and so > we could just increment them, supporting weeks is trickier - are all weeks > composed of 7 days or there are calendars where this is not true? Maybe se > should start without weeks then? Or there will be a callback for them? Leap > seconds may or may not be a concern too. > > On 3 Jun 2020, at 08:45, José Valim <[email protected]> wrote: > > > Thank you for the proposal. I believe this would be a welcome change. My > only question is if we should support them in the Calendar types or > directly on the System module. Given the System module does many > conversions between time units, supporting those there is slightly more > complicated. > > Perhaps we start with support on Calendar types and then we move it to > System if necessary? This means: > > 1. Support minute and hour in Time > 2. Support week in Date > 3. Support minute, hour, day and week in NaiveDateTime > 4. Support minute, hour, day and week in DateTime > > > On Wed, Jun 3, 2020 at 5:34 AM Parker Selbert <[email protected]> > wrote: > >> *Problem* >> >> Functions that convert or work with time units, i.e. >> `System.convert_time_unit/1`, `DateTime.add/3` and `Time.add/3` are limited >> to working with a subset of possible time units. The current subset of *named >> units* includes `:second`, `:millisecond`, `:microsecond`, and >> `:nanosecond`. It is extremely common to manipulate dates and times by >> larger units such as minutes, hours or days. Currently we have to convert >> any values to seconds and then use that to change the value, which isn't >> particularly explicit or expressive. For example, to get the date for one >> week from now I need to write: >> >> DateTime.add(DateTime.utc_now(), 7 * 24 * 60 * 60, :second) >> >> *Proposal* >> >> I propose the addition of larger pre-defined units to make conversion >> more expressive. Units could include some or all of the following: >> >> - `:minute` >> - `:hour` >> - `:day` >> - `:week` >> >> Some larger units such as `month` or `year` are not fixed or standard >> units and could be omitted. >> >> This enables more expressive time calculations such as "one hour from >> now", "one day from now", etc.: >> >> utc_now = DateTime.utc_now() >> DateTime.add(utc_now, 30, :minute) >> DateTime.add(utc_now, 1, :hour) >> DateTime.add(utc_now, 1, :day) >> >> In my experience it is extremely common to find module attributes or >> variables that declar a unit of time to make larger values comprehensible. >> It is much clearer to specify `1, :day` instead of `@one_day_in_seconds, >> :second` or something similar. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "elixir-lang-core" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/elixir-lang-core/7ca22377-aadc-4e5b-a57f-ad0c52fc5ba8%40googlegroups.com >> <https://groups.google.com/d/msgid/elixir-lang-core/7ca22377-aadc-4e5b-a57f-ad0c52fc5ba8%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KTjtL-4K3-hj%2Bf%3D7sqHrkOJ52_C9VJ9u_Ekc35C_dY_A%40mail.gmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4KTjtL-4K3-hj%2Bf%3D7sqHrkOJ52_C9VJ9u_Ekc35C_dY_A%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "elixir-lang-core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/elixir-lang-core/FF8AE738-AF6D-4B5C-8EB9-55F86DC49D8D%40wojtekmach.pl > <https://groups.google.com/d/msgid/elixir-lang-core/FF8AE738-AF6D-4B5C-8EB9-55F86DC49D8D%40wojtekmach.pl?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4Je5HVRyv8CCKjoTSOVsh7C9eVB7ZQa9WbNN2N7KaDBgQ%40mail.gmail.com.
