Date

The date command is crufty.

It can be used for both setting and displaying the current date.

Setting the date requires root privilege and is obsolete since modern systems have a daemon. On Linux the daemon is ntpd, though I think systemd has taken over the responsibility. On Mac the daemon is timed.

The date flags are not standardized for the most part. POSIX only specifies two flags: -u and +CONVERSION_SPECIFICATIONS. As you can see from the table below, flags available on Linux are not necessarily available on Mac and vice versa.

The %s conversion specification for the UNIX epoch is not required by POSIX but is supported on both Linux and Mac.

Linux Mac
set current date $ date MMDDhhmm[[CC]YY] $ date [[[mm]dd]HH]MM[[cc]yy]
set current date using 8601 timestamp $ date -s 2018-10-01T00:00:00 $ date -f %Y-%m-%dT%H:%M:%S 2018-10-01T00:00:00
set current date using UNIX epoch $ date -s @1543336412 $ date -f %s 1543336412
set current date using input format $ date -f %Y%m%d%H%M%S 20181001000000
display current date $ date
Tue Nov 27 08:19:29 PST 2018
$ date
Tue Nov 27 08:19:29 PST 2018
display current UTC date $ date -u
Tue Nov 27 16:27:30 UTC 2018
$ date -u
Tue Nov 27 16:27:30 UTC 2018
display current date according to locale $ LC_ALL=fr_FR date
Mar 27 nov 2018 08:19:24 PST

$ LC_TIME=fr_FR date
Mar 27 nov 2018 08:38:11 PST
display current date using output format $ date +%Y-%m-%dT%H:%M:%S
2018-11-27T08:29:46
$ date +%Y-%m-%dT%H:%M:%S
2018-11-27T08:29:46
display current date as UNIX epoch $ date +%s
1543336412
$ date +%s
1543336412
parse date using input format and display $ date -j -f %Y%m%d%H%M%S 20181001000000
Mon Oct 1 00:00:00 PDT 2018
parse ISO 8601 timestamp and display $ date -d 2018-10-01T00:00:00
Mon Oct 1 00:00:00 PDT 2018
$ date -j -f %Y-%m-%dT%H:%M:%S 2018-10-01T00:00:00
Mon Oct 1 00:00:00 PDT 2018
parse UNIX epoch and display $ date -d @1543336412
Tue Nov 27 08:33:32 PST 2018
$ date -j -f %s 1543336412
Tue Nov 27 08:33:32 PST 2018
parse date using input format and display using output format $ date -j -f %Y%m%d%H%M%S 20181001000000 +%Y-%m-%dT%H:%M:%S
2018-10-01T00:00:00
display one hour before current date $ date -d '-1 hour' $ date -j -f %s $(($(date +%s) - 3600))
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License