💾 Archived View for thrig.me › blog › 1901 › 12 › 13 › epoch-fail.gmi captured on 2024-07-09 at 00:53:21. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2024-05-10)
-=-=-=-=-=-=-
The container is an integer, and the epoch for this post is -2147483648 or INT_MIN.
$ grep INT_MIN /usr/include/sys/limits.h #define INT_MIN (-0x7fffffff-1) /* min value for an int */ $ cfu 'printf("%d\n", INT_MIN)' -2147483648
More relevant is that a particular 32-bit integer counter overflows sometime early in 2038, but there's still plenty of time to fix all that code...
$ cfu 'printf("%d\n", INT_MAX)' 2147483647 $ perl -E 'say 2**31' 2147483648 $ perl -e 'printf "%d\n", 2**31 -1' 2147483647 $ perl -e 'printf "%b\n", 2**31 -1' 1111111111111111111111111111111 $ perl -MTime::Piece -E 'say gmtime(2**31 - 1)->datetime' 2038-01-19T03:14:07
Otherwise, early in 2038 the 32-bit unix epoch will rollover to 1901.
$ make rollover && ./rollover cc -O2 -pipe -o rollover rollover.c 2038-01-19 03:14:07 1901-12-13 20:45:52
December the 13th is a Friday in 1901.
More likely, one might see oddities, such as for when folks who had not read the documentation for localtime(3) in sufficient detail ran into the following year 2000 blooper:
$ perl -E 'say 19 . (localtime)[5]' 19122
Or in C (without error checking of any sort):
#include <stdio.h> #include <time.h> int main(int argc, char *argv[]) { time_t epoch = time(NULL); struct tm *now = localtime(&epoch); printf("19%d\n", now->tm_year); }
tags #epoch