Here are a few examples. Also see the documentation for the -d option in the previous section.
date --date='2 days ago'
date --date='3 months 1 day'
date --date='25 Dec' +%j
date '+%B %d'
But this may not be what you want because for the first nine days of the month, the ‘%d’ expands to a zero-padded two-digit field, for example ‘date -d 1may '+%B %d'’ will print ‘May 01’.
date -d 1may '+%B %-d
date +%m%d%H%M%Y.%S
date --set='+2 minutes'
Fri, 09 Sep 2005 13:51:39 -0700
date --date='1970-01-01 00:02:00 +0000' +%s 120
If you do not specify time zone information in the date string, date uses your computer's idea of the time zone when interpreting the string. For example, if your computer's time zone is that of Cambridge, Massachusetts, which was then 5 hours (i.e., 18,000 seconds) behind UTC:
# local time zone used date --date='1970-01-01 00:02:00' +%s 18120
date --date='2000-01-01 UTC' +%s 946684800
An alternative is to use the --utc (-u) option. Then you may omit ‘UTC’ from the date string. Although this produces the same result for ‘%s’ and many other format sequences, with a time zone offset different from zero, it would give a different result for zone-dependent formats like ‘%z’.
date -u --date=2000-01-01 +%s 946684800
To convert such an unwieldy number of seconds back to a more readable form, use a command like this:
# local time zone used date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z" 1999-12-31 19:00:00 -0500
Or if you do not mind depending on the ‘@’ feature present since coreutils 5.3.0, you could shorten this to:
date -d @946684800 +"%F %T %z" 1999-12-31 19:00:00 -0500
Often it is better to output UTC-relative date and time:
date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z" 2000-01-01 00:00:00 +0000