https://library.linode.com/linux-tools/common-commands/date
Date command is helpful to display date in several formats. It also allows you to set systems date and time.
This article explains few examples on how to use date command with practical examples.
When you execute date command without any option, it will display the current date and time as shown below.
$ date Mon May 20 22:02:24 PDT 2013
If you have a static date or time value in a string, you can use -d or –date option to convert the input string into date format as shown below.
Please note that this doesn’t use the current date and time value. Instead is uses the date and time value that you pass as string.
The following examples takes an input date only string, and displays the output in date format. If you don’t specify time, it uses 00:00:00 for time.
$ date --date="12/2/2014" Tue Dec 2 00:00:00 PST 2014 $ date --date="2 Feb 2014" Sun Feb 2 00:00:00 PST 2014 $ date --date="Feb 2 2014" Sun Feb 2 00:00:00 PST 2014
The following example takes an input date and time string, and displays the output in date format.
$ date --date="Feb 2 2014 13:12:10" Sun Feb 2 13:12:10 PST 2014
This is similar to the -d or –date option that we discussed above. But, you can do it for multiple date strings. If you have a file that contains various static date strings, you can use -f or –file option as shown below.
In this example, we can see that datefile contained 2 date strings. Each line of datefile is parsed by date command and date is outputted for each line.
$ cat datefile Sept 9 1986 Aug 23 1987 $ date --file=datefile Tue Sep 9 00:00:00 PDT 1986 Sun Aug 23 00:00:00 PDT 1987
You can also use date command to get a future date using relative values.
For example, the following examples gets date of next Monday.
$ date --date="next mon" Mon May 27 00:00:00 PDT 2013
If string=@is given to date command, then date command convert seconds since the epoch (1970-01-01 UTC) to a date.
It displays date in which 5 seconds are elapsed since epoch 1970-01-01 UTC:
$ date --date=@5 Wed Dec 31 16:00:05 PST 1969
It displays date in which 10 seconds are elapsed since epoch 1970-01-01 UTC:
$ date --date=@10 Wed Dec 31 16:00:10 PST 1969
It displays date in which 1 minute (i.e. 60 seconds) is elapsed since epoch 1970-01-01 UTC:
$ date --date=@60 Wed Dec 31 16:01:00 PST 1969
You can display a past date using the -date command. Few possibilities are shown below.
$ date --date='3 seconds ago' Mon May 20 21:59:20 PDT 2013 $ date --date="1 day ago" Sun May 19 21:59:36 PDT 2013 $ date --date="yesterday" Sun May 19 22:00:26 PDT 2013 $ date --date="1 month ago" Sat Apr 20 21:59:58 PDT 2013 $ date --date="1 year ago" Sun May 20 22:00:09 PDT 2012
You can set date and time of your system using -s or –set option as shown below..
In this example, initially it displayed the time as 20:09:31. We then used date command to change it to 21:00:00.
$ date Sun May 20 20:09:31 PDT 2013 $ date -s "Sun May 20 21:00:00 PDT 2013" Sun May 20 21:00:00 PDT 2013 $ date Sun May 20 21:00:05 PDT 2013
You can display date in UTC format using -u, or –utc, or –universal option as shown below.
$ date Mon May 20 22:07:53 PDT 2013 $ date -u Tue May 21 05:07:55 UTC 2013
In this example, the current time is 20:25:48
$ date Sun May 20 20:25:48 PDT 2013
The timestamp of datefile is changed using touch command. This was done few seconds after the above date command’s output.
$ touch datefile
The current time after the above touch command is 20:26:12
$ date Sun May 20 20:26:12 PDT 2013
Finally, use the date command -r option to display the last modified timestamp of a file as shown below. In this example, it displays last modified time of datefile as 20:25:57. It is somewhere between 20:25:48 and 20:26:12 (which is when we execute the above touch command to modify the timestamp).
$ date -r datefile Sun May 20 20:25:57 PDT 2013
You can use formatting option to display date command in various formats using the following syntax:
$ date +%<format-option>
The following table displays various date command formatting options.
Format options | Purpose of Option | Output |
---|---|---|
date +%a | Displays Weekday name in short (like Mon, Tue, Wed) | Thu |
date +%A | Displays Weekday name in full short (like Monday, Tuesday) | Thursday |
date +%b | Displays Month name in short (like Jan, Feb, Mar ) | Feb |
date +%B | Displays Month name in full short (like January, February) | February |
date +%d | Displays Day of month (e.g., 01) | 07 |
date +%D | Displays Current Date; shown in MM/DD/YY | 02/07/13 |
date +%F | Displays Date; shown in YYYY-MM-DD | 2013-02-07 |
date +%H | Displays hour in (00..23) format | 23 |
date +%I | Displays hour (01..12) format | 11 |
date +%j | Displays day of year (001..366) | 038 |
date +%m | Displays month (01..12) | 02 |
date +%M | Displays minute (00..59) | 44 |
date +%S | Displays second (00..60) | 17 |
date +%N | Displays nanoseconds (000000000..999999999) | 573587606 |
date +%T | Displays time; shown as HH:MM:SS Note: Hours in 24 Format | 23:44:17 |
date +%u | Displays day of week (1..7); 1 is Monday | 4 |
date +%U | Displays week number of year, with Sunday as first day of week (00..53) | 05 |
date +%Y | Displays full year i.e. YYYY | 2013 |
date +%Z | alphabetic time zone abbreviation (e.g., EDT) | IS |