Get Yesterday's date in solaris

百般思念 提交于 2019-12-01 05:16:50

Try this below thing. It should work

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

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

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

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
Arun

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

user2622547

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)

A pure bash solution given by @olivecoder is very reliable compared to any other solution but there is a mistake to be corrected. when the day fall on 1st of the month the script is failing with date saying "last_day_of_month" in day value. @olivecoder has missed $ in day=last_day_of_month, that it should be

day=$last_day_of_month;

After this correction it works very good.

Using Timezone -24 is having some issue based on time when use it. in some cases it goes to day before yesterday. So I think its not reliable.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!