Chinaunix

标题: 如何在shell里面计算日期? [打印本页]

作者: dougq    时间: 2008-04-24 10:39
标题: 如何在shell里面计算日期?
我现在是想用:

DATE=$(date +%Y%m%d)

得到的是今天的日期

如果我想得到前两周内的每天的日期,该如何做呢??

因为可能遇到现在是月初,可能减去两周(7天)就跑上个月去了,那样的话,需要处理闰月的问题

我想问问诸位兄台有没有更好的办法,不去处理闰月,将问题简单化呢.

请赐教,不胜感激!
作者: dougq    时间: 2008-04-24 10:41
初步想法是:用时间戳减,然后换算日期??不知道能否实现.
作者: waker    时间: 2008-04-24 11:00
http://bbs.chinaunix.net/viewthr ... p;page=1#pid4559524

如果是gnu date 直接用 -d选项,如果是其它的参考上面的一些文章
作者: nuclearxin    时间: 2008-04-24 11:04
shall i  install  a  gnu date  on  unix  or  anyother  like-unix  system?
作者: dougq    时间: 2008-04-24 15:17
写完了,谢谢楼上各位朋友

#!/bin/bash
#desc:clear the bak file of before 14 days ago in every day.
#see:crontab -e
#date:2008.4.24
#author:dougq
export NOW_DATELINE=$(date +%s)
export SECOND_TOTAL=$[24*3600*15]
export BEFORE_DATELINE=$[$NOW_DATELINE-$SECOND_TOTAL]
export BEFORE_NOW_YMD=`date -d '1970-01-01 UTC '$BEFORE_DATELINE' seconds' +%Y%m%d`
export BASE_DIR="/data3/Backup/Oracle/TRSWCM52/old_backup"
export DEL_FILE1="$BASE_DIR/TRSWCM52_Oracle_bak_$BEFORE_NOW_YMD.dmp"
export DEL_FILE2="$BASE_DIR/TRSWCM52_Oracle_bak_$BEFORE_NOW_YMD.log"
export DEL_FILE3="$BASE_DIR/TRSWCM_PLUGINS_Oracle_bak_$BEFORE_NOW_YMD.dmp"
export DEL_FILE4="$BASE_DIR/TRSWCM_PLUGINS_Oracle_bak_$BEFORE_NOW_YMD.log"
if [ -f $DEL_FILE1 ]; then
  rm -rf $DEL_FILE1;
  #echo "$DEL_FILE1 is deleted!"
fi
if [ -f $DEL_FILE2 ]; then
  rm -rf $DEL_FILE2;
  #echo "$DEL_FILE2 is deleted!"
fi
if [ -f $DEL_FILE3 ]; then
  rm -rf $DEL_FILE3;
  #echo "$DEL_FILE3 is deleted!"
fi
if [ -f $DEL_FILE4 ]; then
  rm -rf $DEL_FILE4;
  #echo "$DEL_FILE4 is deleted!"
fi
作者: zdm    时间: 2009-03-09 17:44
标题: 回复 #1 dougq 的帖子
用得着这么麻烦吗?


#date -I -d '-n day'(可以得到N天前的日期,格式为YYYY-MM-DD)
#date –d '-n day' "+%Y%m%d" (可以得到N天前的日期,格式为YYYYMMDD)
作者: 皇家救星    时间: 2009-03-09 20:57
写一个函数输入日期,获得该天的昨天

需要注意,1号,1月,需要分别对月和年做减1操作

除2月外每月天数是固定的,可以用一个数组存起来,
set 数组名 各月天数空格分开

直接用 数组名[月份] 就可获得

能够被4整除,但不能被100整除或者能被4整除,也能被400整除的年份是闰年
需要特别处理 数组名[2] = 29
作者: crastyl    时间: 2009-03-09 21:38
-3d 这样
作者: yaosh_bonc    时间: 2009-05-05 18:17
标题: 回复 #6 zdm 的帖子
hp-unix 下呢 你用过这个系统没?
作者: 皇家救星    时间: 2009-05-05 21:23
今天发现一个偷懒的做法 利用cal
作者: zhangshebao    时间: 2009-05-05 22:02
bash-3.2$ awk 'BEGIN{for(i=14;i>0;i--)print strftime("%Y%m%d",systime()-3600*24*i)}'
20090421
20090422
20090423
20090424
20090425
20090426
20090427
20090428
20090429
20090430
20090501
20090502
20090503
20090504
bash-3.2$




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2