当前位置:Linux教程 - Linux综合 - shell计算明天和昨天日期的函数

shell计算明天和昨天日期的函数

  #返回月份的天数 get_mon_days() { Y=`eXPr substr $1 1 4` M=`expr substr $1 5 2` r1=`expr $Y \% 4` r2=`expr $Y \% 100` r3=`expr $Y \% 400` case $M in 01030507081012) days=31;; 04060911) days=30;; esac if [ $M -eq 02 ] then if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ] then days=29 else days=28 fi fi echo $days } #返回昨天日期 get_before_date() { Y=`expr substr $1 1 4` M=`expr substr $1 5 2` D=`expr substr $1 7 2` YY=`expr $Y - 1` MM=`expr $M - 1` DD=`expr $D - 1` MM=`printf "%02d" $MM` DD=`printf "%02d" $DD` dd=$Y$MM dad=`get_mon_days $dd` be_date=$Y$M$DD if [ $D -eq 01 ] then if [ $M -ne 01 ] then be_date=$Y$MM$dad fi if [ $M -eq 01 ] then be_date=$YY"1231" fi fi echo $be_date } #返回明天日期 get_next_date() { Y=`expr substr $1 1 4` M=`expr substr $1 5 2` D=`expr substr $1 7 2` YY=`expr $Y + 1` MM=`expr $M + 1` DD=`expr $D + 1` MM=`printf "%02d" $MM` DD=`printf "%02d" $DD` r1=`expr $Y \% 4` r2=`expr $Y \% 100` r3=`expr $Y \% 400` next_date=$Y$M$DD if [ $D -eq 30 ] then case $M in 04060911) next_date=$Y$MM"01";; esac fi if [ $D -eq 31 ] then next_date=$Y$MM"01" case $M in 12) next_date=$YY"0101";; esac fi if [ $M -eq 02 ] then if [ r1 -eq 0 -a r2 -ne 0 -o r3 -eq 0 ] then if [ $D -eq 29 ] then next_date=$Y$MM"01" fi else if [ $D -eq 28 ] then next_date=$Y$MM"01" fi fi fi echo $next_date } 本人在HP Unix下测试通过 不错. 不过,用改变时区的方法,得到的结果不是又简单,又准确吗? 版主时区变换法是什么? 比如说,想这样: offset=`echo $TZ tr -d '[A-Z+]'` new_offset=`expr $offset - 24 `
[1] [2] 下一页 

TZ=`echo $TZ sed "s/[+-]{0,1}[1-9][0-9]{0,1}/$new_offset/` date +%D 请问能不能解释一下这三句话的含义呀? 我第二句执行不过! 第二句是`不是',是不是输错了. 我是copy, paste 上的! root/export >offset=`echo $TZ tr -d '[A-Z+]'` root/export >echo $offset GMT8 root/export >new_offset=`expr $offset - 24 ` expr: non-numeric argument tr -d '[A-Z+] offset 里怎么还会有GMT呢? 有GMT expr当然不认了. 是呀! 第一句有什么问题呀???? 你是什么系统啊,什么版本的tr啊. 俺都试过的啊. valentine,能不能解释一下这几句,3x! #offset=`echo $TZ tr -d '[A-Z+]'` #使用tr删除变量中的大写字符和+号,只保留数字 new_offset=`expr $offset - 24 ` #改变数字,因为TZ变量中的数字反映的是本地相对与GMT的偏移 TZ=`echo $TZ sed "s/[+-]{0,1}[1-9][0-9]{0,1}/$new_offset/` date +%D #使用算出来的偏移构造新的TZ变量,这里使用了正则表达式里稍复杂点的东西 #主要是{0,1},表示前面的字符或子表达式出现的次数最小0次,最多1次. 为什么我的$TZ只是大写字符,没有数值? 我用的是s8操作系统 那样作法是不对的:20020930+1=? 20021001-1=? #echo $TZ CST-8 换一部机器: #echo $TZ EST5EDT 奇怪! 有什么奇怪的,那两台机子的时区不一样啊!

(出处:http://www.sheup.com)


上一页 [1] [2] 

我用的是s8操作系统 那样作法是不对的:20020930+1=? 20021001-1=? #echo $TZ CST-8 换一部机器: #echo $TZ EST5EDT 奇怪! 有什么奇怪的,那两台机子的时区不一样啊!

(出处:http://www.sheup.com/)


上一页 [1] [2] [3]