在solaris获取昨天的date

我正在运行SunOS。

bash-3.00$ uname -a SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc 

我需要从命令提示符传递正确的格式Yesterday's date in linuxfindYesterday's date in linux 。 当我在我的shell提示符下尝试这样的时候,

 bash-3.00$ date --date='yesterday' '+%Y%m%d' date: illegal option -- date=yesterday usage: date [-u] mmddHHMM[[cc]yy][.SS] date [-u] [+format] date -a [-]sss[.fff] 

我总是得到dateillegal option ,为什么呢? 我正在做什么错事?

更新: –

 bash-3.00$ date --version date: illegal option -- version usage: date [-u] mmddHHMM[[cc]yy][.SS] date [-u] [+format] date -a [-]sss[.fff] 

Solutions Collecting From Web of "在solaris获取昨天的date"

尝试下面的东西。 它应该工作

 YESTERDAY=`TZ=GMT+24 date +%Y%m%d`; echo $YESTERDAY 

试试这个:

 DATE_STAMP=`TZ=GMT+24 date +%Y%m%d` 

格林尼治标准时间是时区,您可能需要根据您与格林尼治标准时间的差异来更改24。 无论是这样,或者你可以改变格林威治时间到一个更舒适的时区,例如科技委

正如larsks所建议的,你可以使用perl:

 perl -e 'use POSIX qw(strftime); print strftime "%a %b %e %H:%M:%S %Y",localtime(time()- 3600*24);' 

从略有修改

http://blog.rootshell.be/2006/05/04/solaris-yesterday-date/

要获得YYYYMMDD格式使用这个

 perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d",localtime(time()- 3600*24);' 

这个链接解释了如何使用strftime格式化日期和时间

http://perltraining.com.au/tips/2009-02-26.html

一个纯粹的bash解决方案

 #!/bin/bash # get and split date today=`date +%Y%m%d` year=${today:0:4} month=${today:4:2} day=${today:6:2} # avoid octal mismatch if (( ${day:0:1} == 0 )); then day=${day:1:1}; fi if (( ${month:0:1} == 0 )); then month=${month:1:1}; fi # calc day=$((day-1)) if ((day==0)); then month=$((month-1)) if ((month==0)); then year=$((year-1)) month=12 fi last_day_of_month=$((((62648012>>month*2&3)+28)+(month==2 && y%4==0))) day=$last_day_of_month fi # format result if ((day<10)); then day="0"$day; fi if ((month<10)); then month="0"$month; fi yesterday="$year$month$day" echo $yesterday 

TZ=$TZ+24 date +'%Y/%m/%d'在SunOS中。

在非GMT时间的Solaris10上玩,我得到这个:

 # date Fri Jul 26 13:09:38 CEST 2013 (OK) # (TZ=CEST+24 date) Thu Jul 25 11:09:38 CEST 2013 (ERR) # (TZ=GMT+24 date) Thu Jul 25 11:09:38 GMT 2013 (OK) # (TZ=CEST+$((24-$((`date "+%H"`-`date -u "+%H"`)))) date) Thu Jul 25 13:09:38 CEST 2013 (OK) 

正如你colud看到的,我有,我想获得CEST,但TZ = CEST + 24给我错误的CEST数据; GMT + 24给我正确的数据,但无法使用。

为了得到正确的结果,我必须使用GMT + 22(错误的命令,正确的结果)或CEST + 22(错误的值,但正确的结果正确的TZ)

与其他解决方案相比, @olivecoder提供的纯粹的bash解决方案非常可靠,但有一个错误需要纠正。 当月份的第一天下午,脚本失败,日期的值为“ last_day_of_month ”。 @olivecoderday=last_day_of_month错过了$ ,应该是

 day=$last_day_of_month; 

经过这个修正后,效果非常好。

使用时区-24在使用会遇到一些问题。 在某些情况下,它前天。 所以我认为它不可靠。