• sugar_in_your_tea@sh.itjust.works
    link
    fedilink
    arrow-up
    1
    arrow-down
    1
    ·
    edit-2
    3 days ago

    That sounds like an irrelevant problem though. A duration is explicitly not concerned with daylight savings at all, I’ve always thought of it as the amount of actual time (i.e. from a monotonic clock) that has elapsed between two absolute times. So a time diff between noon on daylight savings change day and the day prior would either be 23 or 25 hours, not exactly equal to Duration::from_days(1). There’s no time zone or even year context for Duration::from_days(1), so it should always be defined as a naïve calculation involving fixed definitions for hours per day and seconds per hour.

    Years are a bit more controversial, to the point where 365 days and 365.24 days are both acceptable in different contexts, and that latter value could change in the very long term (millions of years). But I think up to days, most can agree that the value assumes exactly 24 hours and is completely separate from the idea of wall clocks changing based on local law.

    Now, if we want to support “logical” time math, add that to the date/time methods likelogical_add(Duration) that adds/subtracts daylight savings hours and leap seconds as needed so if you add a multiple of 24 hours, you’ll get the same wall clock time just on a different day. Maybe chrono does that, IDK, but it would be nice to have day resolution supported at the stdlib level for simple cases where I’m looking for day chunks. It’s not a big deal, and Duration::from_hours(24) is plenty readable.

    • SorteKanin@feddit.dk
      link
      fedilink
      arrow-up
      5
      ·
      edit-2
      3 days ago

      so it should always be defined as a naïve calculation involving fixed definitions for hours per day and seconds per hour.

      Well… that’s your opinion. But other people disagree and say that this could be confusing. But I won’t rehash the whole debate, you can read it here instead: https://github.com/rust-lang/rust/issues/120301

      I’m sure it’s already been discussed to death 😅

      • sugar_in_your_tea@sh.itjust.works
        link
        fedilink
        arrow-up
        2
        arrow-down
        1
        ·
        3 days ago

        As long as it’s documented well, I don’t think it should matter. If it doesn’t do the thing you expect, don’t use it. I’m assuming there’s almost a 1:1 association between devs who will use Duration::from_days() wrong and devs who would make their own constants and use them wrong, so the least harmful approach is to make them available and document them clearly.

        But yeah, this topic has been beaten to death and I’m mostly whining about a bit of typing, which is now substantially less with Duration::from_hours() being stabilized. I’m happy they stabilized minutes and hours, and I’m hoping they stabilize days at some point.

        • xav@programming.dev
          link
          fedilink
          arrow-up
          4
          ·
          3 days ago

          C++ has proven (at great expense) that documenting footguns is not sufficient. At all. You have to make them impossible.

          • sugar_in_your_tea@sh.itjust.works
            link
            fedilink
            arrow-up
            3
            ·
            3 days ago

            Then make it explicit, e.g. Duration::from_days_monotonic(...) . I’m also fine with just having constants, but those are nightly only. I want a way to clearly express durations in terms of days, and constants and functions are clearer than comments.

            • SorteKanin@feddit.dk
              link
              fedilink
              arrow-up
              1
              ·
              3 days ago

              I want a way to clearly express durations in terms of days

              The argument here is that expressing durations in terms of days is a bad idea because “day” does not really convey a very precise duration, as it is not always 24 hours.

              Maybe you won’t be confused by Duration::from_days right now, but maybe a junior dev before they get their coffee, or even the senior dev on code review might miss stuff like that.

              • sugar_in_your_tea@sh.itjust.works
                link
                fedilink
                arrow-up
                3
                ·
                3 days ago

                But a day does have exactly 24 hours, at least when using Unix timestamps. Leap seconds aren’t accounted for in a Unix timestamp, and Unix timestamps assume UTC timezone, which doesn’t have daylight savings.

                If you don’t make a “from_days()” or “DAYS” constant, people will make their own and they’ll be wrong in exactly the same way as if that function or constant was defined in the stdlib, but at least in the stdlib, you have the opportunity to centralize the documentation for it and maybe educate that junior dev before they make a mistake.