Using GNU bash? Forget date!

Since Version 4.2.0 GNU bash can print times in strftime format with printf.

OK, the external date command can do a lot that bash's builtin cannot do, but for most use cases this is enough - and it's always better to use builtins, because if you're using bloated bash, at least take full advantage of its capabilities!

Usage example from here:

sh
TIMESTAMP_FORMAT='%Y-%m-%dT%H:%M:%S' # Bash version in numbers like 4003046, where 4 is major version, 003 is minor, 046 is subminor. printf -v BV '%d%03d%03d' ${BASH_VERSINFO[0]} ${BASH_VERSINFO[1]} ${BASH_VERSINFO[2]} if ((BV > 4002000)); then log() { ## Fast (builtin) but sec is min sample for most implementations printf "%(${TIMESTAMP_FORMAT})T %5d %s\n" '-1' $$ "$*" # %b convert escapes, %s print as is } else log() { ## Slow (subshell, date) but support nanoseconds and legacy bash versions echo "$(date +"${TIMESTAMP_FORMAT}") $$ $*" } fi