Display or set date and time

date [-nu] [-r file] [+format]

date [[[[[cc]yy]mm]dd]hh]mm[.ss]

+ prefixes format codes or arbitrary text (ex :, /,- ). A <newline> is appended to the string.
   N.B. If used in crontab command fiels, % must be escaped.

The default format is: "%a %b %e %H:%M:%S %Z %Y"
sample output: Sat Feb 5 18:09:28 EST 2005

Useful forms:

export TODAY=`date +%y%m%d` 101108
export yymmdd=`date +"%y%m%d"` 100915
export LOGYYMMDDHHMM=`date +log.%y%m%d%H%M` log.0807201859
date +"%m/%d %H:%M" 07/20 18:56
touch `date +%y-%m-%d_%H:%M` 10-12-31_23:59

-r
--reference=file
output the modification time of file

date -r 0test
Thu Aug 19 18:05:09 EDT 2010

format codes (arranged by function, not alphabetically)

%m mm month (01..12) (how to blank padded?? ie ' 1, 2, 3' vs '01,02,03' ?? )
%h Mon %b locale's abbreviated month (Jan..Dec) %B locale's full month, variable length ex:(January..December)
%d dd (01..31) %e ( 1..31)
%y yy two digit year (00..99)
%Y ccyy year (1970...) %C cc century [00-99]
%g 2-digit year corresponding to the %V week number %G 4-digit

%F %Y-%m-%d
  for this locale
%D mm/dd/yy %x mm/dd/yy
%T hh:mm:ss 24-hour %X %H:%M:%S
%R 24-hour (hh:mm) %r time, 12-hour (hh:mm:ss x.M) %I HH hours (01..12) %l 1..12 %H 00..23 %k 0..23

%p upper case AM or PM (blank in many locales) %P lower case am or pm
%M MM minutes (00..59)
%S SS second (00..60)) The 60 is necessary to accommodate a leap second
%N nanoseconds (000000000..999999999)

%c locale's date and time ex: Sat Nov 04 12:02:33 EST 1989

%j day of year (001..366)

%u day of week (1..7); 7 represents Sunday mtwtfss %w (0..6); 0 represents Sunday smtwtfs
%a locale's abbreviated weekday (Sun..Sat)
%A locale's full weekday, variable length (Sunday..Saturday)

%U week number Sunday as first day of week (00..53)
%W week number Monday as first day of week (00..53) %V (01..53)

%z -zzzz RFC-822 style numeric timezone (-0500)
%: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 time zone (e.g., EDT) nothing if no time zone is determinable

%s seconds since 00:00:00 1970-01-01 UTC
     1264434947 is Mon Jan 25 10:55:57 EST 2010

     To convert %s value like 1212642879 use date -d "1970-01-01 1212642879 sec utc"

literals: %n newline ; %% percent; %t horizontal tab

By default, date pads numeric fields with zeroes.

GNU (not BSD) date recognizes modifiers between % and a numeric:
- (hyphen) do not pad the field           _ (underscore) pad the field with spaces

     examples: %_H == %k       %-m/%-d/%y 1/2/50

TZ Specifies the timezone, unless overridden by command line parameters. If neither is specified, the setting from /etc/localtime is used.

-d
-de=STRING display time described by STRING not now.

> echo $TZ
US/Eastern
date -d "2010/12/31"              Fri Dec 31 00:00:00 EST 2010
date -d "12/31/2010"              Fri Dec 31 00:00:00 EST 2010
date -d "2010-12-31 23:58:57"     Fri Dec 31 23:58:57 EST 2010
date -d "23:58:57 12/31/2010"     Fri Dec 31 23:58:57 EST 2010
date -d "12/31/2010 23:58:57"     Fri Dec 31 23:58:57 EST 2010
date -d "12/31/2010 23 sec"       Fri Dec 31 00:00:23 EST 2010 
To convert %s value like 1212642879 use date -d "1970-01-01 1212642879 sec utc"

-e=datefile like de once for each line of datefile

-s
--set=string set time described by string      date -s "2010-12-31 23:59:00"

-n don't synchronize the clocks on groups of machines using the utility timed(8).
     By default, if timed is running, date will set the time on all of the machines in the local group. -n inhibites that.

date and time seconds from the Epoch. ( i.e. Dec 31 19:00:00 EST 1969 )
-u Display or set the date in UTC (universal) time.

Without the + , date uses the argument for setting the system's date if user has sufficient authorization.

date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
The only valid option for the this form specifies Coordinated Universal Time.

-u GMT ex: Sat Feb  5 14:49:42 GMT 2005
--utc
--universal Coordinated Universal Time local TZ Sat Feb  5 09:49:59 EST 2005

-ITIMESPEC
--iso-8601[=TIMESPEC] output in ISO 8601 format.
         TIMESPEC precision for date only, hours, minutes, or seconds for date and time to the indicated precision.

> date --iso-8601=date
2010-08-23
> date --iso-8601=hours
2010-08-23T21-0400
> date --iso-8601=minutes
2010-08-23T21:05-0400
> date --iso-8601=seconds
2010-08-23T21:05:53-0400

-R
--rfc-822 output RFC-822 compliant date string ex: Sat Feb   5 09:50:23 EST 2005

--help display this help and exit

--version output version information and exit

from BSD documentation of date and strtime on apple OS X
date (coreutils) 4.5.3

Linux: date (GNU coreutils) 5.97 Copyright (C) 2006