我正在运行SunOS。
bash-3.00$ uname -a
SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc
我需要找到Yesterday'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]
我总是得到约会illegal option
,为什么会这样?
我在做什么事吗?
更新: -
bash-3.00$ date --version
date: illegal option -- version
usage: date [-u] mmddHHMM[[cc]yy][.SS]
date [-u] [+format]
date -a [-]sss[.fff]
答案 0 :(得分:8)
尝试以下内容。它应该工作
YESTERDAY=`TZ=GMT+24 date +%Y%m%d`; echo $YESTERDAY
答案 1 :(得分:3)
试试这个:
DATE_STAMP=`TZ=GMT+24 date +%Y%m%d`
其中GMT是时区,您可能需要根据GMT的小时差异更改24。要么是这样,要么你可以将GMT更改为对你更舒适的时区,例如: CST
答案 2 :(得分:2)
正如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格式化日期和时间
答案 3 :(得分:2)
纯粹的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
答案 4 :(得分:1)
TZ=$TZ+24 date +'%Y/%m/%d'
。
答案 5 :(得分:0)
在非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)
正如你看到的那样,我有,我想得到CEST,但TZ = CEST + 24给我错误的CEST数据; GMT + 24给我正确的数据,但无法使用。
为了得到正确的结果,我必须使用GMT + 22(错误的命令,正确的结果)或CEST + 22(错误的值,但是正确的TZ的结果正确)
答案 6 :(得分:0)
@ emivecoder 给出的纯bash解决方案与其他任何解决方案相比都非常可靠,但是有一个错误需要纠正。当一天中的第一天下降时,脚本失败,日期值为“last_day_of_month
”。 @olivecoder 错过了 $
day=last_day_of_month
,它应该是
day=$last_day_of_month;
经过这次修正后效果非常好。
使用时区-24 在使用时基于时间会遇到一些问题。在某些情况下,它发生在前天。所以我认为它不可靠。