bug#80974: Add Time conversion specifiers quick reference

Pádraig Brady <[email protected]> Thu, 7 May 2026 21:01:44 +0100
Newsgroups gmane.comp.gnu.core-utils.bugs
Message-ID <[email protected]>
On 07/05/2026 18:49, Dan Jacobson wrote:
>>>>>> "PB" == Pádraig Brady <[email protected]> writes:
> PB>   %c    '%a %x %X'  locale's date and time
> 
> That's what I'm trying to avoid.
> 
> I'm trying to see real samples, with no intellectual thinking involved.

That particular one is way to long to display,
so I used a more abstract form for it.

> 
> PB>   %C    20          century; like %Y, except omit last two digits
> PB>   %d    01          day of month
> PB>   %D    12/31/99    date (ambiguous); same as %m/%d/%y
> PB>   %e     1          day of month, space padded; same as %_d
> PB>   %F    1999-12-31  full date; like %+4Y-%m-%d
> PB>   %g    99          year of ISO week number (last two digits; 00-99); see %G
> PB>   %G    1999        year of ISO week number; normally useful only with %V
> 
> Also could you just use "now", a random date, not something specially
> tinkered so that it is a special date many years ago.

I wanted to use examples that were easily recognizable
to the quantity being displayed, rather than an arbitrary date.

> 
> PB>   %N    123456789   nanoseconds (000000000..999999999)
> 
> Yes, it is nice to know how many digits, but the example becomes less real.

I think that's fine

> 
> PB>   %p    PM          locale's equivalent of AM or PM; blank if not known
> PB>   %P    pm          like %p, but lower case
> PB>   %q    4           quarter of year (1..4)
> PB>   %r    1:11:04 PM  locale's 12-hour clock time
> PB>   %R    23:59       24-hour hour and minute; same as %H:%M
> PB>   %s    1778169005  seconds since the Epoch (1970-01-01 00:00 UTC)
> PB>   %S    59          second (00..60)
> PB>   %t    \t          a tab
> 
> Well that's tinkered too.
> 
> I would write
> 
> PB>   %t                "[<- there's a tab (\t) there.]"

I'll keep this aligned with what's done for %n
> 
> PB>   %:z    +04:00     +hh:mm numeric time zone
> PB>   %::z   +04:00:00  +hh:mm:ss numeric time zone
> PB>   %:::z  +04        numeric time zone to necessary precision; with :
> 
> I'd put these in a separate section. After the straight alphabet part.

I'll keep these with the main group for now
> And be sure to include the one liner script so people can do it
> themselves. And be sure it's a real one liner.

A portable one liner could be:

printf $(printf '\\%03o\\n' $(seq 97 122) $(seq 65 90)) | xargs -If date +"%%f  %f"

Though that's a bit obtuse.
Note we had something similar with `dircolors --print-ls-colors`
where we previously had a one liner to display the database.
I'm considering instead we should support date --show-formats
which would generate the above table with the current date/time/locale.
It could also show the %E and %O variants (if different).
It might also show the --iso and --rfc formats too.

cheers,
Padraig