This is going to be a very simple guide, but one I often find myself needing (because who can remember these formats, right?).
date command by default has a pretty readable output.
$ date Wed Dec 30 21:50:15 CET 2015
If also allows you to modify its output with special FORMAT options. Those are written as
date +"FORMAT". Some examples below.
For instance, a simple YYYY-MM-DD representation:
$ date +"%Y-%m-%d" 2015-12-30
Or just to display the current time:
$ date +"%T" 21:55:16
Or a more complete example which follows the Apache log format of displaying dates (ie: [30/Dec/2015:21:48:45 +0100]).
$ date +"[%d/%b/%Y:%k:%M:%S %z]" [30/Dec/2015:12:58:32 +0100]
date command also allows you pretty easy manipulation of the “current date”. By default,
date refers to “NOW”. It’ll show the current time or date when you execute the command. With the
-d parameter you can also let it jump back & forth and show you a different date.
$ date +"%Y-%m-%d" 2015-12-30 $ date +"%Y-%m-%d" -d "8 days ago" 2015-12-22 $ date +"%Y-%m-%d" -d "next Sunday" 2016-01-03 $ date +"%Y-%m-%d" -d "last Friday" 2015-12-25
Here’s the complete list of modifiers. You can replace them in any of the examples above to get different outputs.
FORMAT controls the output. Interpreted sequences are: %% a literal % %a locale’s abbreviated weekday name (e.g., Sun) %A locale’s full weekday name (e.g., Sunday) %b locale’s abbreviated month name (e.g., Jan) %B locale’s full month name (e.g., January) %c locale’s 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 ( 0..23) %l hour ( 1..12) %m month (01..12) %M minute (00..59) %n a newline %N nanoseconds (000000000..999999999) %p locale’s equivalent of either AM or PM; blank if not known %P like %p, but lower case %r locale’s 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 locale’s date representation (e.g., 12/31/99) %X locale’s time representation (e.g., 23:13:48) %y last two digits of year (00..99) %Y year %z +hhmm numeric timezone (e.g., -0400) %:z +hh:mm numeric timezone (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) By default, date pads numeric fields with zeroes. The following optional flags may follow ‘%’: - (hyphen) do not pad the field _ (underscore) pad with spaces 0 (zero) pad with zeros ^ use upper case if possible # use opposite case if possible
These modifiers are especially useful in scripts. You can get an easy-to-use date variable for logging to files like this.
$ cat script.sh #!/bin/bash TODAY=$(date +"%Y-%m-%d") echo $TODAY
If you execute it:
$ ./script.sh 2015-12-30