千家信息网

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

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,在Linux下很容易解决这个问题date +"%Y%m%d" -d "+n days" 今天的后n天日期date +"%Y%m%d" -d "-n days" 今天的前n天日期在UNIX下没有'-d'
千家信息网最后更新 2024年11月20日UNIX下获取前一天后一天的日期

在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`

注意: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=$1else   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#如果日期只有一位则前补0expr $day : "^.$" > /dev/null && day=0$dayexpr $month : "^.$" > /dev/null && month=0$monthlastdate=$year$month$dayecho "lastdate="$lastdateyear=`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$dayexpr $month : "^.$" > /dev/null && month=0$monthnextdate=$year$month$dayecho "nextdate="$nextdateexit 0




0