Getting the system date and time in any shell scripts or bash on docker or regular OS is common.
The bash shell-based date command provides many options and switches to get that right! Let us explore how to obtain 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
In the above script, the date +%Y%m%d%H%M%S%3N command uses the %Y for the four-digit year, %m for the two-digit month, %d for the two-digit day, %H for the two-digit hour in 24-hour format, %M for the two-digit minute, %S for the two-digit second.
If you want to add Milliseconds, then add %3N at the end (3N for the three-digit milliseconds).
date +%Y%m%d%H%M%S%3N
Example #1. Printing date in yyyymmddhhmmss, adding hyphen for readability.
dev@codetryout:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-00
dev@codetryout:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-01
dev@codetryout:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-02
dev@codetryout:~$ date +"%Y-%m-%d-%H-%M-%S"
2013-08-31-21-57-03
dev@codetryout:~$ 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.
dev@codetryout:~$ date +"%Y_%m_%d_%H_%M_%S"
2013_08_31_21_57_20
dev@codetryout:~$ date +"%Y_%m_%d_%H_%M_%S"
2013_08_31_21_57_21
dev@codetryout:~$ date +"%Y_%m_%d_%H_%M_%S"
2013_08_31_21_57_21
dev@codetryout:~$
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 generate and store your desired date data in variables or 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 UNIX timestamp or epoch time, and please refer to this guide for getting the UNIX timestamp
Note that the millisecond portion will be zero-padded if the system’s clock resolution doesn’t provide millisecond accuracy.
You can modify the script to suit your needs and use the desired format specifier in the date command to customize the output according to your requirements.