Solaris & yesterday date?

The GNU version of date(1) has a nice flag –date. It’s very easy to format dates in the past or future:

$ date +%d-%m-%Y
04-05-2006
$ date --date yesterday +%d-%m-%Y
03-05-2006
$ date --date "-6 months" +%d-%m-%Y
04-11-2005

The Solaris version of date(1) has no such nice flags. So, how to print another date?

Direct in a shell:

$ YESTERDAY=`TZ=GMT+24 date +%d-%m-%Y`; echo $YESTERDAY
03-05-2006
$ YESTERDAY=`TZ=GMT-48 date +%d-%m-%Y`; echo $YESTERDAY
06-05-2006

But, in this case, we are limited to a few days in the past or future. Another solution is Perl:

$ perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y",\
localtime(time()- 3600*24*2);'
Tue May  2 14:59:41 2006