Get Yesterday's date in solaris

2019-02-17 07:29发布

I am running SunOS.

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

I need to find Yesterday's date in linux with the proper formatting passed from command prompt. When I tried like this on my shell 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]

I always get date illegal option, why is it so? Is there anything wrong I am doing?

Update:-

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

7条回答
够拽才男人
2楼-- · 2019-02-17 08:06

A pure bash solution

#!/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
查看更多
干净又极端
3楼-- · 2019-02-17 08:10

As larsks suggested, you can use perl:

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

Slightly modified from

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

To get YYYYMMDD format use this

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

This link explains how to format date and time with strftime

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

查看更多
叼着烟拽天下
4楼-- · 2019-02-17 08:11

TZ=$TZ+24 date +'%Y/%m/%d' in SunOS.

查看更多
Viruses.
5楼-- · 2019-02-17 08:26

Try this below thing. It should work

YESTERDAY=`TZ=GMT+24 date +%Y%m%d`; echo $YESTERDAY
查看更多
啃猪蹄的小仙女
6楼-- · 2019-02-17 08:30

Try this one out:

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

where GMT is the time zone and you might need to alter the 24 according to the hours difference you have from GMT. Either that or you can change GMT to a time zone more comfortable to you e.g. CST

查看更多
\"骚年 ilove
7楼-- · 2019-02-17 08:31

Playing on Solaris10 with non-GMT environment, I'm getting this:

# 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)

As You colud see, I have and I want to get CEST , but TZ=CEST+24 giving me wrong CEST data; GMT+24 giving me correct data, but unusable.

To get the proper result, I has to use GMT+22 (wrong command, correct result) or CEST+22 (wrong value, but finnaly correct result for correct TZ)

查看更多
登录 后发表回答