On Sat, Feb 12, 2022 at 12:49:10PM +0100, Ricardo Wurmus wrote: > > Hi adriano, > > I’ve got no good answers as to “why” things are the way they are, but > the manual explains the range of these values: > > > It seesm to be > > > > (tm:mon %3) > > > > This returns > > > > 11 > > > > I expected 12 but ok, I recognize this kind of weirdness > > -- Scheme Procedure: tm:mon tm > -- Scheme Procedure: set-tm:mon tm val > Month (0-11). > > > I'm unhappy with > > > > (tm:year $3) > > > > This returns > > > > 120 > > > > it's 2020 > > > > Why would 120 represent 2020 ? > > -- Scheme Procedure: tm:year tm > -- Scheme Procedure: set-tm:year tm val > Year (70-), the year minus 1900. > > I don’t know why this would be useful, but that’s what it is ¯\_(ツ)_/¯ Oh. That is old POSIXy tradition :-) Guile actually only passes along what libc provides, and I think it is a good idea, in general. See the man page of localtime(3) on your next Linux-ish box for all the details. If you prefer an online version, perhaps [1], [2] convey an idea. The year... those interfaces were developed well before the year 2000. It was usual, Back Then (TM) to write down the year as a two-digit number (the 19 prefix was implied). Nobody could predict that the year 2000 was about to arrive, honestly ;-) As to the month... zero based numberings ease computations and setting up name arrays (as in: 0: January, 1: February and so on). Don't ask me why, though, the day of the month (1..31) is one-based. It is the only exception :-) But it makes for an easy calculation where you can add up the year (times year length, taking leap years into account), the days-in-month so far for full months and the current month day and things to arrive at the current Epoch day. Guess one has to be one-based, otherwise you'll have to add 1 at the end. (This is all somewhat tongue-in-cheek ;-P But it illustrates some other point: for folks coming from C and POSIX, (I do), all that stuff feels "pretty natural", although it isn't, of course. Cheers [1] https://en.cppreference.com/w/c/chrono/localtime [2] https://en.cppreference.com/w/c/chrono/tm -- t