获取昨日在solaris日期(Get Yesterday's date in solaris

2019-06-26 20:47发布

我运行SunOS。

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

我需要找到Yesterday's date in linux从命令提示符传递正确的格式。 当我试图像这样在我的壳prompt-

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]

Answer 1:

试试这个下面的事情。 它应该工作

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


Answer 2:

试试这个:

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

其中GMT是时区,你可能需要根据时间差从GMT必须改变24。 如果不是这样,你可以改变格林尼治标准时间的时区更舒适的你,例如CST



Answer 3:

作为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



Answer 4:

纯的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


Answer 5:

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



Answer 6:

玩Solaris10的非GMT的环境中,我得到这个:

# 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 finnaly正确的结果)



Answer 7:

相较于其他任何解决方案由@olivecoder给出纯bash的解决方案是非常可靠的,但有加以纠正一个错误。 当在本月1日的日跌幅脚本与日期没有说“ last_day_of_month在一天的价值。” @olivecoder已经错过了在$ day=last_day_of_month ,它应该是

day=$last_day_of_month;

这种修正后,它的工作原理很不错。

使用时区-24是具有基于时间的时候使用它的一些问题。 在某些情况下,它关系到前天。 所以,我认为它不可靠的。



文章来源: Get Yesterday's date in solaris