温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

UNIX下获取前一天后一天的日期

发布时间:2020-03-13 09:13:33 来源:网络 阅读:5958 作者:wty530 栏目:系统运维

在Linux下很容易解决这个问题

              date  +"%Y%m%d" -d  "+n days"         今天的后n天日期  

              date  +"%Y%m%d" -d  "-n days"         今天的前n天日期

在UNIX下没有'-d'选项,所以无法使用上面的方法

    网上看到有一种通过时区进行调整echo `TZ=aaa16 date +%Y%m%d\ %H:%M:%S`

UNIX下获取前一天后一天的日期

注意:date打印的并不是本地时区的时间,而是标准时间,既伦敦时间。

       伦敦在西一区,北京在东八区相差八个时区。

       TZ是一个系统的环境变量,记录了系统所在的时区,aaa可以为任意字符串,16表示与标准时间的时差。

      输入env|grep TZ输出TZ=EAT-8

同理,通过echo `TZ=aaa-32 date +%Y%m%d\ %H:%M:%S`可获取后一天的日期

以上两种是比较简单的获取方法,如果觉得这种方法不太靠谱,可以写个shell脚本,以下自己写的可以参考下

#!/bin/sh

#输入日期参数,不输入默认当天
if [ $# -eq 1 ]
then
   today=$1
else
   today=`date +%Y%m%d`
fi
#获取年月日
year=`echo $today|cut -c 1-4`
month=`echo $today|cut -c 5-6`
day=`echo $today|cut -c 7-8`

if [ $day -eq 1 ]
then
   month=`expr $month - 1`
   #月份减一后如果为0则为上一年,月份置12,年份减一
   [ $month -eq 0 ] && month=12 && year=`expr $year - 1`
   #获取年月日历
   aaa=`cal $month $year`
   #获取最后一天
   day=`echo $aaa|awk '{print $NF}'`
else
   day=`expr $day - 1`
fi
#如果日期只有一位则前补0
expr $day : "^.$" > /dev/null && day=0$day
expr $month : "^.$" > /dev/null && month=0$month
lastdate=$year$month$day

echo "lastdate="$lastdate

year=`echo $today|cut -c 1-4`
month=`echo $today|cut -c 5-6`
day=`echo $today|cut -c 7-8`

aaa=`cal $month $year`
bbb=`echo $aaa|awk '{print $NF}'`
[ $bbb -eq $day ] && month=`expr $month + 1` && day=0
[ $month -gt 12 ] && month=1 && year=`expr $year + 1`
day=`expr $day + 1`
expr $day : "^.$" > /dev/null && day=0$day
expr $month : "^.$" > /dev/null && month=0$month
nextdate=$year$month$day

echo "nextdate="$nextdate

exit 0




向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI