this post was submitted on 14 Dec 2023
928 points (99.2% liked)

xkcd

8991 readers
312 users here now

A community for a webcomic of romance, sarcasm, math, and language.

founded 2 years ago
MODERATORS
 

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.]

top 50 comments
sorted by: hot top controversial new old
[–] ericbomb@lemmy.world 115 points 1 year ago* (last edited 1 year ago) (1 children)

We use datediff in sql and let God handle the rest.

"Oh but they're in different time zones" "Oh did you account for if one is in day light savings and other isn't" "Aren't some of these dates stored in UTC and some local?"

Are all problems I do not care about.

[–] Cosmonaut_Collin@lemmy.world 46 points 1 year ago (3 children)

This is why we should just move to a universal time zone and stop with the day light savings.

[–] nxdefiant@startrek.website 47 points 1 year ago* (last edited 1 year ago) (4 children)

We have that, it's called Unix time, and the only thing it doesn't account for is time dilation due to relativity.

it's perfect

[–] phoneymouse@lemmy.world 18 points 1 year ago (2 children)

If your system hasn’t been upgraded to 64-bit types by 2038, you’d deserve your overflow bug

[–] Appoxo@lemmy.dbzer0.com 8 points 1 year ago (1 children)

Let's just nake it 128-Bit so it's not our problem anymore.
Hell, let's make it 256-Bit because it sounds like AES256

[–] phoneymouse@lemmy.world 14 points 1 year ago* (last edited 1 year ago) (1 children)

64 bits is already enough not to overflow for 292 billion years. That’s 21 times longer than the estimated age of the universe.

[–] nybble41@programming.dev 13 points 1 year ago (2 children)

If you want one-second resolution, sure. If you want nanoseconds a 64-bit signed integer only gets you 292 years. With 128-bit integers you can get a range of over 5 billion years at zeptosecond (10^-21 second) resolution, which should be good enough for anyone. Because who doesn't need to precisely distinguish times one zeptosecond apart five billion years from now‽

load more comments (2 replies)
[–] Isthisreddit@lemmy.world 4 points 1 year ago

Cries in vintage computer collection tears.

You are a monster phoneymouse

[–] EatYouWell@lemmy.world 2 points 1 year ago

I thought that's what datetime was based off of, tbh.

load more comments (2 replies)

Give it a few more decades

[–] The_Lurker@lemmy.world 5 points 1 year ago

Swatch's Internet Beats are making more and sense every time Daylight Savings forces a timezones change. Why are we still using base 12 for time anyway?

[–] marcos@lemmy.world 58 points 1 year ago (1 children)

From the wikipedia:

TCB ticks faster than clocks on the surface of the Earth by 1.550505 × 10−8 (about 490 milliseconds per year)

It's amazing that this level of detail is relevant to anything.

[–] elvith@feddit.de 51 points 1 year ago (5 children)
[–] hakunawazo@lemmy.world 12 points 1 year ago (2 children)

Thank you, but I gave up halfway through the list.

[–] whoisearth@lemmy.ca 3 points 1 year ago

Epoch is your friend, or use UTC. At least that's my layman reasoning. I have no challenges working with DateTime except when I don't know the underlying conditions applied from the source code.

load more comments (1 replies)
[–] randy@lemmy.ca 10 points 1 year ago (4 children)

I really wish that list would include some explanations about why each line is a falsehood, and what's actually true. Particularly the line:

The software will never run on a space ship that is orbiting a black hole.

If the author has proof that some software will run on a space ship that is orbiting a black hole, I'd be really interested in seeing it.

[–] nybble41@programming.dev 11 points 1 year ago

Technically isn't the Earth itself a sort of space ship which is orbiting (...a star which is orbiting...) the black hole at the center of the Milky Way galaxy? Not really close enough for time dilation to be a factor, but still.

[–] elvith@feddit.de 7 points 1 year ago

All links to the original article are dead and even archive.org doesn't have a capture either. I guess the argument is along the lines of "it might not be relevant, when you're scripting away some tasks for your small personal projects, but when you're working on a widely used library or tool - one day, it might end up on a space vessel to explore whatever."

E.g. my personal backup script? Unlikely. The Linux kernel? Somewhat plausible.

load more comments (2 replies)
[–] sukhmel@programming.dev 10 points 1 year ago (1 children)

This one is good (or evil, depends on how you see it):

Human-readable dates can be specified in universally understood formats such as 05/07/11.

[–] elvith@feddit.de 7 points 1 year ago

That one's really good.

Which one is it?

  • July 5th 2011
  • May 7th 2011
  • July 11th 2005
  • November 7th 2005

And is it 2011/2005 or rather 1911/1905, 1811/1805,...?

[–] Kethal@lemmy.world 8 points 1 year ago (1 children)

Does anyone know what is untrue about "Unix time is the number of seconds since Jan 1st 1970."?

[–] icydefiance@lemm.ee 25 points 1 year ago* (last edited 1 year ago) (1 children)

When a leap second happens, unix time decreases by one second. See the section about leap seconds here: https://en.m.wikipedia.org/wiki/Unix_time

As a side effect, this means some unix timestamps are ambiguous, because the timestamps at the beginning and the end of a leap second are the same.

[–] nybble41@programming.dev 4 points 1 year ago

It might be more accurate to say that Unix time is the number of days since Jan 1st, 1970, scaled by 24×60×60. Though it gets a bit odd around the actual leap second since they aren't spread over the whole day. (In some ways that would be a more reasonable way to handle it; rather than repeating a second at midnight, just make all the seconds slightly longer that day.)

[–] Logical@lemmy.world 3 points 1 year ago

This post made my head hurt

[–] chuck@lemmy.ca 46 points 1 year ago (3 children)

Ah I've gotten to the point where I have to define what "frame" and epoch each time base is in before I'll touch the representation of time( Unix,Gregorian, etc) .To be honest I'm probably just scratching the surface of time problem.

Hell probably the reason we haven't seen time travellers is we suck at tracking time and you probably need to accurately know your time and place to a very good precision to travel to a given point and we can't say where and when that is with enough accuracy to facilitate where to land. And people don't want to land in the earth's surface or 10000 km away from a stable orbit. Maybe some writer can build that out for a time travel book or to discount it for some reason lol

[–] niktemadur@lemmy.world 5 points 1 year ago* (last edited 1 year ago)

Then there's continental drift, which as Indiana Jones reminded us this past summer, Archimedes didn't know about when he built his time machine.

Pet peeve: brushing aside the time travel fantasy element, there is not a single shred of evidence of any type of connection between Archimedes and the Antikythera Mechanism.

As if the only person clever enough in Ancient Greece was that one famous dude from Syracuse.
Ionians: "Are we a joke to you?"

load more comments (2 replies)
[–] reverendsteveii@lemm.ee 35 points 1 year ago* (last edited 1 year ago) (5 children)

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.

[–] drislands@lemmy.world 8 points 1 year ago (1 children)

In the example you gave, wouldn't the year be off by one when param2.month is 12?

[–] reverendsteveii@lemm.ee 9 points 1 year ago (1 children)

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 2 points 1 year 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!

[–] kogasa@programming.dev 4 points 1 year ago (6 children)

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

load more comments (6 replies)
load more comments (3 replies)
[–] BeautifulMind@lemmy.world 28 points 1 year ago* (last edited 1 year ago) (1 children)

LOL whenever I have to work with DateTime systems that try to account for every possibility (and fail trying) I am reminded that in some disciplines, it's acceptable to simplify drastically in order to do 'close enough' work.

I mean, if spherical cows are a thing because that makes the math of theoretical physics doable, why not relativity-free or just frame-constant date-time measures that are willing to ignore exotic edge cases like non-spherical livestock?

[–] kogasa@programming.dev 3 points 1 year ago

Because "relativity" isn't even close to your biggest problem with time. The way we communicate time changes historically, unpredictably, without obvious record. The only way to know what time you're talking about is to know exactly how you got your information. What location, measured at what time relative to recorded changes in the local time zone, with how much drift relative to the last time you synchronized to which ntp server, and so on. These things easily account for hours or days of error, not just nanoseconds.

[–] MxM111@kbin.social 22 points 1 year ago* (last edited 1 year ago) (2 children)

Not even going to general relativity, as this comics suggests to experience time slowing down due to gravity, the events are not just at time, but also at particular location in space relative particular inertial system. Not specifying it, and not specifying the inertial system for which the final answer is needed makes it impossible to calculate even in special relativity, without effects of gravity.

[–] steventhedev@lemmy.world 23 points 1 year ago* (last edited 1 year ago) (1 children)

Here's the shortlist of horrors I've had to deal with in my career:

  • Mixed US/ROW short date formats - DD/MM/YY, MM/DD/YY
  • mixed timezones in the same column
  • the wrong timezone (marked as PDT but actually UTC, or sometimes the other way around)
  • clock drift
  • timezones again...because timezones suck
  • historical timezones
  • NTP configurations

Things I've read about but haven't needed to deal with personally:

  • leap seconds
  • clock slew vs skip
  • hardware clocks
  • PTP

The one thing I really don't care about is relativity

[–] Narrrz@kbin.social 4 points 1 year ago

it's all relative anyway

[–] JohnDClay@sh.itjust.works 17 points 1 year ago (2 children)

Relevant Tom Scott video the answer depends on location, times, country, religion, and a bunch of other factors.

[–] threelonmusketeers@sh.itjust.works 4 points 1 year ago* (last edited 1 year ago) (1 children)

I wonder what fraction of xkcd readers have already seen this video... I imagine it is quite high. I know I've watched it multiple times. It's a good one.

load more comments (1 replies)
[–] slice@feddit.de 3 points 1 year ago

Scrolled trough here just to search for this comment 😂

[–] randomaccount43543@lemmy.world 15 points 1 year ago
[–] Limonene@lemmy.world 12 points 1 year ago (2 children)

C++ user with operator overloading: "T2 minus T1."

Let someone else implement the class. There's probably a library for it.

[–] worldsayshi@lemmy.world 2 points 1 year ago

Is there a straightforward way to know which overloading will be used or is it just a roulette every time you add a sketchy new library to your build?

load more comments (1 replies)
[–] dm_me_your_boobs@lemm.ee 4 points 1 year ago (2 children)

That's me in the bottom right corner over there.

load more comments (2 replies)
load more comments
view more: next ›