shell date 获取昨天日期及几种特殊格式


  • 第一种 使用date -d 选项
              date  +"%Y%m%d" -d  "+n days"         今天的后n天日期  
              date  +"%Y%m%d" -d  "-n days"          今天的前n天日期
  • 自己写函数
#!/bin/ksh
#获取昨天的日期
lastday()
{
  Today=`date +%Y%m%d`
  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
    if [ $MONTH -eq 1 ]
    then
      YEAR=`expr $YEAR - 1`
      MONTH=12
    else
      MONTH=`expr $MONTH - 1`
    fi
#如下两种方法皆可
    #DAY=`echo \`cal $MONTH $YEAR\`|tail -n1|awk '{print $NF}'`
# 
   DAY=$(cal $MONTH $YEAR | tail -n2|sed -n 1,1p | awk '{print $NF}')

  else
    DAY=`expr $DAY - 1`
  fi
  LAST=$(echo "$YEAR $MONTH $DAY"|awk '{if (length($2)==1) $2=0$2;if (length($3)==1) $3=0$3;printf "%s%s%s",$1,$2,$3}')
}
GetLastDate()
{
TODAY=`date "+%Y %m %d"`
LASTDATE=`echo $TODAY|awk \
'{ \
Year=$1; Month=$2; Day=$3; \
M[1]=31; M[2]=28; M[3]=31; M[4]=30; M[5]=31; M[6]=30; \
M[7]=31; M[8]=31; M[9]=30; M[10]=31; M[11]=30; M[12]=31; \


if (Year%4==0 && (Year%100!=0 || Year%400==0)) M[2]=29; \
else M[2]=28; \
if (Day-1==0) \
{ \
if (Month-1==0) { Year-=1; Month=12; } \
else Month-=1; \
Day=M[Month]; \
} \
else Day-=1; \
printf("%04d%02d%02d", Year, Month, Day); \
}'`
}


echo "***************"
lastday
echo ${LAST}
echo "***************"
GetLastDate
echo ${LASTDATE}
-----------------------------------------------------------
常用日期格式 
[root@localhost tmp]# date +"%F"
2012-06-08
[root@localhost tmp]# date +"%D"
06/08/12
[root@localhost tmp]# date +"%Y%m%d %H:%M:%S"
20120608 04:52:28
[root@localhost tmp]# date +"%Y%m%d"
20120608
[root@localhost tmp]# date +"%Y%m%d %H:%M:%S" -d "+1 hours"
20120608 05:52:43
[root@localhost tmp]# date +"%Y%m%d %H:%M:%S" -d "+1 days"
20120609 04:52:52
[root@localhost tmp]# date +"%Y%m%d %H:%M:%S" -d "+1 months"
20120708 04:52:56
[root@localhost tmp]# date +"%Y%m%d %H:%M:%S" -d "+1 years"
20130608 04:53:07
[root@localhost tmp]# date +"%T"
05:03:21
[root@localhost tmp]# date +"%F %T"
2012-06-08 05:03:34
[root@localhost tmp]# date +"%D %T"
06/08/12 05:03:39








[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S"
2012-07-18 05:17:01
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "+10hour"
2012-07-18 15:17:16
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "+24hour"
2012-07-19 05:17:37
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "-24hour"
2012-07-17 05:17:45
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "-20minute"
2012-07-18 04:58:00
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "+20minute"
2012-07-18 05:38:05
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "+2day"
2012-07-20 05:18:15
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "-2day"
2012-07-16 05:18:19
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "-2month"
2012-05-18 05:18:24
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "+2month"
2012-09-18 05:18:28
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "+2year"
2014-07-18 05:18:32
[root@localhost riqi]# date +"%Y-%m-%d %H:%M:%S" -d "-2year"
2010-07-18 05:18:36

---------------------------------------------------

用shell将时间字符串与时间戳互转

date +%s   可以得到UNIX的时间戳;
用shell将时间字符串与时间戳互转:
      date -d "2010-10-18 00:00:00" +%s         输出形如:1287331200
而时间戳转换为字符串可以这样做:
      date -d @1287331200  "+%Y-%m-%d"    输出形如:2010-10-18
如果需要得到指定日期的前后几天,可以:
      1、seconds=`date -d "2010-10-18 00:00:00" +%s`       #得到时间戳
      2、seconds_new=`expr $seconds + 86400`                   #加上一天的秒数86400
      3、date_new=`date -d @$seconds_new "+%Y-%m-%d"`   #获得指定日前加上一天的日前






评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值