Bash date format print yyyymmddhhmmss milliseconds

It is not uncommon to get the system date and time in any shell scripts or bash, on docker or regular OS.

The bash shell-based date command provides a lot of options and switches to get that right! Let us explore on how to get the date time with all commonly required fields, such as Year, Month, Day, Hour, Minute, and seconds.

Here are some examples of printing the date (and time) in custom formats.

date +"%Y-%m-%d-%H-%M-%S"

Example #1. Printing date in yyyymmddhhmmss, adding hyphen for readability.

[email protected]:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-00
[email protected]:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-01
[email protected]:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-02
[email protected]:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-03
[email protected]:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-04

Example #2. The Hyphen above can be replaced with other characters, or space or empty.

[email protected]:~$ date +"%Y_%m_%d_%H_%M_%S"
2013_08_31_21_57_20
[email protected]:~$ date +"%Y_%m_%d_%H_%M_%S"
2013_08_31_21_57_21
[email protected]:~$ date +"%Y_%m_%d_%H_%M_%S"
2013_08_31_21_57_21
[email protected]:~$ 

Let us explore a few more possible date selections, including milliseconds ( from the date man page)

%%     a literal %
%a     locales abbreviated weekday name (e.g., Sun)
%A     locales full weekday name (e.g., Sunday)
%b     locales abbreviated month name (e.g., Jan)
%B     locales full month name (e.g., January)
%c     locales date and time (e.g., Thu Mar  3 23:05:25 2005)
%C     century; like %Y, except omit last two digits (e.g., 20)
%d     day of month (e.g., 01)
%D     date; same as %m/%d/%y
%e     day of month, space padded; same as %_d
%F     full date; same as %Y-%m-%d
%g     last two digits of year of ISO week number (see %G)
%G     year of ISO week number (see %V); normally useful only with %V
%h     same as %b
%H     hour (00..23)
%I     hour (01..12)
%j     day of year (001..366)
%k     hour, space padded ( 0..23); same as %_H
%l     hour, space padded ( 1..12); same as %_I
%m     month (01..12)
%M     minute (00..59)
%n     a newline
%N     nanoseconds (000000000..999999999)
%p     locales equivalent of either AM or PM; blank if not known
%P     like %p, but lower case
%q     quarter of year (1..4)
%r     locales 12-hour clock time (e.g., 11:11:04 PM)
%R     24-hour hour and minute; same as %H:%M
%s     seconds since 1970-01-01 00:00:00 UTC
%S     second (00..60)
%t     a tab
%T     time; same as %H:%M:%S
%u     day of week (1..7); 1 is Monday
%U     week number of year, with Sunday as first day of week (00..53)
%V     ISO week number, with Monday as first day of week (01..53)
%w     day of week (0..6); 0 is Sunday
%W     week number of year, with Monday as first day of week (00..53)
%x     locales date representation (e.g., 12/31/99)
%X     locales time representation (e.g., 23:13:48)
%y     last two digits of year (00..99)
%Y     year
%z     +hhmm numeric time zone (e.g., -0400)
%:z    +hh:mm numeric time zone (e.g., -04:00)
%::z   +hh:mm:ss numeric time zone (e.g., -04:00:00)
%:::z  numeric time zone with : to necessary precision (e.g., -04, +05:30)
%Z     alphabetic time zone abbreviation (e.g., EDT)

Printing bash date Year, Month, Day, Hour, Minute, and Seconds, tested in Ubuntu Linux.

The same syntax can be used to generate your desired date data and store it in variables or in inline scripts

Example: Storing the date information to a variable

my_date=$(date +"%Y-%m-%d-%H-%M-%S")

Another popular use of the date command is to get the Ubin timestamp or epoch time, please refer to this guide for getting the UNIX timestamp