Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: can strftime show 'p.m.' instead of 'PM'?



On Sat, 28 Apr 2012 14:55:25 -0400
TJ Luoma <luomat@xxxxxxxxx> wrote:

> 
> Before I begin, I should say that I realize this may (seem to) be
> extremely picayune, but it consistently annoys me. Judge me as you
> will :-)

One shall never debate the validity of taste. Unless it regards
the dreadful modern popular music. But in my experience the
exploration of zsh is all about, erm, "picayunicies". Pardon my spanish
por favor.

> 
> `man strftime` says this:
> 
>      %p    is replaced by national representation of either "ante
> meridiem" (a.m.)  or "post meridiem" (p.m.)  as appropriate.
> 
>      %F    is equivalent to ``%Y-%m-%d''.
> 
>      %r    is equivalent to ``%I:%M:%S %p''.
> 
> However when I do this in zsh
> 
> $ strftime "%F %r" "$EPOCHSECONDS"
> 
> I get this:
> 
> 2012-04-28 02:50:24 PM
> 
> Ideally I would like "PM" to be "p.m." but I'd probably settle for
> "pm"
> 
> I tried using '%P' instead of '%p' (thinking that might invert the
> case) but that just gave me a literal 'P' instead.
> 
> I realize that I could use:
> 
> strftime "%F %r" "$EPOCHSECONDS" | tr '[A-Z]' '[a-z]'
> 
> or even
> 
> strftime "%F %r" "$EPOCHSECONDS" | sed 's#AM#a.m#g; s#pPM#p.m.#g'
> 
> but I wondered if there was a better (more efficient) way.
> 
> Thanks
> 
> TjL

I'm not sure if my idea will help you because from the looks of it this
also uses strftime - but I'll share the idea anyway.

You can use ZSH's prompt expansion. In the zshmisc man (although i
always just 'man zshall') you can find 'Date and time' for prompt
expansion. Further, zshexpn explains that you can expand these in brace
expansions á là:

% foo='%D{%F %r}'   -- this part comes from zshmisc
% print ${(%)foo}   -- this part comes from zshexpn
2012-04-28 10:59:15 PM

So if you expand further (there are probably better methods?):

% print ${${${(%)foo}/AM/a.m}/PM/p.m.}
2012-04-28 10:59:57 p.m.


One thing by the way that seems to not work quite correctly from the
looks of it:

literally print the prompt string:
% echo $(echo '%D{%F %r}')     
%D{%F %r}  -- expected, works

immediately formulate the time out of it:
% echo ${(%)$(echo '%D{%F %r}')} 
2012-04-28 }  -- not expected

Oh well, who can blame zsh for not keeping up with this funky stuff. :)

HTH
- Mark



Messages sorted by: Reverse Date, Date, Thread, Author