https://xkcd.com/2867

Alt text:

It’s not just time zones and leap seconds. SI seconds on Earth are slower because of relativity, so there are time standards for space stuff (TCB, TGC) that use faster SI seconds than UTC/Unix time. T2 - T1 = [God doesn’t know and the Devil isn’t telling.]

  • Alien Nathan Edward@lemm.ee
    link
    fedilink
    English
    arrow-up
    23
    ·
    edit-2
    11 months ago

    I just spent two days debugging a reporting endpoint that takes in two MM-YYYY parameters and tries to pull info between the first day of the month for param1 and the last day of the month for param2 and ended up having to set my date boundaries as

    LocalDate startDate = new LocalDate(1, param1.getMonth(), param2.getYear()); //pretty straightforward, right?

    //bump month by one, account for rollover, set endDate to the first of that month, then subtract one day

    int endMonth = param2.month == 12 ? param2.month + 1 : 1;

    LocalDate endDate = new LocalDate(1, endMonth, param2.year).minusDays(1);

    This is extraordinarily simply for humans to understand intuitively, but to code it requires accounting for a bunch of backward edge/corner case garbage. The answer, of course, is to train humans to think in Unix epoch time.

      • Alien Nathan Edward@lemm.ee
        link
        fedilink
        English
        arrow-up
        9
        ·
        11 months ago

        I was transcribing it from memory and that exact problem cost me like two hours when I was writing it the first time. Well spotted, now write me a unit test for that case.

        • drislands@lemmy.world
          link
          fedilink
          English
          arrow-up
          2
          ·
          11 months ago

          Y’know, I legitimately said to myself “I bet they were writing that from memory and just forgot the edge case. I wonder if that was a problem when doing it originally?” before I wrote that comment. 😂 Time to get some Spock tests set up!

    • chayleaf@lemmy.ml
      link
      fedilink
      English
      arrow-up
      2
      ·
      11 months ago

      Unix epoch time is wrong too, as it doesn’t include leap seconds, meaning your time difference will be off by up to 15 seconds.

    • Kogasa@programming.dev
      link
      fedilink
      English
      arrow-up
      2
      ·
      11 months ago

      Unix epoch time in UTC, making sure that your local offset and drift are current at the time of conversion to UTC…

    • Strykker@programming.dev
      link
      fedilink
      English
      arrow-up
      1
      ·
      11 months ago

      All dates and times shall be stored and manipulated in Unix time. Only convert to a readable format at the top of the UI, and forget trying to parse user inputs :P that’s just impossible