6

我正在运行 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]
4

7 回答 7

10

试试下面这个。它应该工作

YESTERDAY=`TZ=GMT+24 date +%Y%m%d`; echo $YESTERDAY
于 2012-08-07T22:52:44.960 回答
3

试试这个:

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

其中 GMT 是时区,您可能需要根据与 GMT 的小时差来更改 24。或者您可以将 GMT 更改为对您来说更舒适的时区,例如 CST

于 2012-08-07T22:55:01.957 回答
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 格式化日期和时间

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

于 2012-08-07T22:57:34.450 回答
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
于 2012-08-08T12:36:03.163 回答
1

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

于 2015-12-16T20:44:50.100 回答
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 的结果)

于 2013-07-26T11:24:34.143 回答
0

与任何其他解决方案相比, @olivecoder提供的纯 bash 解决方案非常可靠,但有一个错误需要纠正。当这一天落在该月的 1 日时,脚本失败,日期显示为“ last_day_of_month”日值。@olivecoder错过了$ in day=last_day_of_month,应该是

day=$last_day_of_month;

修正后效果非常好。

使用Timezone -24在使用时会遇到一些基于时间的问题。在某些情况下,它会持续到前天。所以我认为它不可靠。

于 2016-06-20T05:45:00.913 回答