TIL: Sweden had February 30 in 1712 https://en.wikipedia.org/wiki/1712_in_Sweden , so I decided to see how chrono handled that.

use chrono::TimeZone;
use chrono_tz::Europe::Stockholm;

fn main() {
    let feb30 =  Stockholm.ymd(1712,2,30);
    println!("Date: {:?}", feb30);
}
 target/debug/feb30
thread 'main' panicked at /home/snaggen/.cargo/registry/src/index.crates.io-6f17d22bba15001f/chrono-0.4.34/src/offset/mod.rs:252:40:
No such local time
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Result (as expected): Not well! 😄

I also tested Java with

ZonedDateTime feb30 = ZonedDateTime.of(1712,2,30, 0,0,0,0, ZoneId.of("Europe/Stockholm"));

with simmilar result

java.time.DateTimeException: Invalid date 'FEBRUARY 30'

So, lets take a minute of silence for all the programmers of history related software, may the spagetti monster have mercy on their souls.

  • robinm@programming.dev
    link
    fedilink
    arrow-up
    5
    ·
    10 months ago

    The issue is that the notion of “tomorrow” becomes quite hard to express. If it’s 20:00 when the sun rose, when does tomorrow starts? In 5 hours ?

    • Turun@feddit.de
      link
      fedilink
      arrow-up
      2
      ·
      10 months ago

      Most people are flexible about that already. If you stay up to ten past twelve, do you say “I really need to get to bed now, I have work tomorrow” or do you say “I really need to get to bed now, I have work today”?

      The same will be true for morning and evening in everyday speech, it follows your sleep schedule, which follows the sun. Just like summer can already mean July or December, depending on your longitude.

      • robinm@programming.dev
        link
        fedilink
        arrow-up
        1
        ·
        10 months ago

        I wasn’t clear enough. But in a contry where the sun rise at 20:00, the weekday looks like:

        • day 1: Monday morning to Tuesday evening
        • day 2: Tuesday morning to Wednesday evening
        • day 3: Wednesday morning to Thurday,

        And phares like "let’s meet on Tuesday“ without hour indication could either mean end of day 1 or start of day 2. Likewise "let’s meet the 20th” (assuming the 20th is a Tuesday) could either mean end of day 1 or beggining of day 2.

        And alternative be to have

        • day 1 == Monday == “end of the 19th” to “the start of the 20th”
        • day 2 == Tuesday == “end of the 20th” to “the start of the 21st”
        • day 3 == Monday == “end of the 21st” to “the start of the 22nd”

        Which solve the issue of "let’s meet on Tuesday”, but not “let’s meet the 20th”.

        • Turun@feddit.de
          link
          fedilink
          arrow-up
          1
          ·
          edit-2
          10 months ago

          Yes, that’s one actual problem that is not covered by everyday speech as it is in use today.

          I think it would be very quickly solved by language evolution. E.g. we’d switch to something like “the evening on the 20th” or “the third day next week” (weeks are defined by the presence of weekends, just like they are today). But nonetheless it’s a valid argument.

          Edit: even today weekends cover multiple days. However you define a weekend now can probably be used to define a day in the global UTC system.

    • sugar_in_your_tea@sh.itjust.works
      link
      fedilink
      arrow-up
      2
      ·
      10 months ago

      No, I think that would still be based on local sun time, and we’d just not use it much when talking to people outside that time zone. So in a video call, we’d just say, “let’s meet at 08:00”, which could be “tomorrow” for some listeners, and could be later today for others. A day would still be from sun-up to sun-down, in colloquial terms, but dates would be from 00:00 to 23:59, so if you wanted to be precise, you’d just say the date.