免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 31183 | 回复: 45
打印 上一主题 下一主题

俺写了几个关于日期的小函数  关闭 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-01-28 18:53 |只看该作者 |倒序浏览
有些是以前的,有些没有判断输入合法性,有问题请指正

#计算某日前若干天的日期
#date=YYYYMMDD
#Usage:command date days
str=$1
days=$2
yy=`echo $str|cut -c 1-4`
mm=`echo $str|cut -c 5-6`
dd=`echo $str|cut -c 7-8`
sav_dd=$days
days=`expr $days - $dd`
while [ $days -ge 0 ]
do
        mm=`expr $mm - 1`
        [ $mm -eq 0 ] && mm=12 && yy=`expr $yy - 1`
        aaa=`cal $mm $yy`
        bbb=`echo $aaa|awk '{print $NF}'`
        days=`expr $days - $bbb`
done
dd=`expr 0 - $days`
expr $dd : "^.$" > /dev/null && dd=0$dd
expr $mm : "^.$" > /dev/null && mm=0$mm
echo $yy$mm$dd


#计算某日后若干天日期
#date=YYYYMMDD
#Usage:command date days
str=$1
days=$2
yy=`echo $str|cut -c 1-4`
mm=`echo $str|cut -c 5-6`
dd=`echo $str|cut -c 7-8`
days=`expr $days + $dd`
while [ $days -gt 0 ]
do
        aaa=`cal $mm $yy`
        bbb=`echo $aaa|awk '{print $NF}'`
        sav_dd=$days
        sav_mm=$mm
        sav_yy=$yy
        days=`expr $days - $bbb`
        mm=`expr $mm + 1`
        [ $mm -gt 12 ] && mm=1 && yy=`expr $yy + 1`
done
expr $sav_dd : "^.$" > /dev/null && sav_dd=0$sav_dd
expr $sav_mm : "^.$" > /dev/null && sav_mm=0$sav_mm
echo $yy$sav_mm$sav_dd
~                 
感觉上面两个挺实用的

#计算前一天日期
aaa=`echo $TZ|sed 's/.*\(..\)/\1/'`
aaa=`expr $aaa + 24`
eval aaa=`echo $TZ|sed 's/..$/+$aaa/'`
TZ=$aaa
export TZ
yy=`date +%y`
mm=`date +%m`
dd=`date +%d`
echo $mm$dd$yy

可以调用上面的函数推导出.

#取上月末日期
get_lastday_of_lastmonth()
{
yy=`date +%Y`
mm=`date +%m-1|bc`
[ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1`
aaa=`cal $mm $yy`
dd=`echo $aaa|awk '{print $NF}'`
echo $yy$mm$dd
}
~     

#计算两个日期间有多少天
#date1,date2:yyyymmdd
#Usage:command date1 date2
str=$1
yy1=`echo $str|cut -c 1-4`
mm1=`echo $str|cut -c 5-6`
dd1=`echo $str|cut -c 7-8`
str=$2
yy2=`echo $str|cut -c 1-4`
mm2=`echo $str|cut -c 5-6`
dd2=`echo $str|cut -c 7-8`
count_day=`expr $dd2 - $dd1`
while [ $yy2 -ne $yy1 -o $mm2 -ne $mm1 ]
do
        mm2=`expr $mm2 - 1`
        [ $mm2 -eq 0 ] && mm2=12 && yy2=`expr $yy2 - 1`
        aaa=`cal $mm2 $yy2`
        bbb=`echo $aaa|awk '{print $NF}'`
        count_day=`expr $count_day + $bbb`
done
echo $count_day

论坛徽章:
0
2 [报告]
发表于 2003-01-29 09:51 |只看该作者

俺写了几个关于日期的小函数

不错不错,建议斑竹盖个章

论坛徽章:
0
3 [报告]
发表于 2003-01-30 23:28 |只看该作者

俺写了几个关于日期的小函数

...

对,盖个章!章呢?斑竹过年去了,章也带走啦……

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2003-01-31 00:27 |只看该作者

俺写了几个关于日期的小函数

不知大家发现没有,nkliyong在搞日期方面是大拿

论坛徽章:
0
5 [报告]
发表于 2003-02-06 17:23 |只看该作者

俺写了几个关于日期的小函数

这年一过,红袖和laoxia都升啦,俺要加倍努力.

aaa=`cal $mm $yy`
bbb=`echo $aaa|awk '{print $NF}'`

其实感觉用上面两句取某月有多少天在计算日期中非常有用
俺也是吸取前人的经验灵活应用一下.

论坛徽章:
0
6 [报告]
发表于 2003-02-06 17:58 |只看该作者

俺写了几个关于日期的小函数

嘿嘿
过完年真的是要努力了!!

论坛徽章:
0
7 [报告]
发表于 2003-02-08 11:55 |只看该作者

俺写了几个关于日期的小函数

expr $dd : "^.$" > /dev/null && dd=0$dd
能给解释一下吗

论坛徽章:
0
8 [报告]
发表于 2003-02-08 14:23 |只看该作者

俺写了几个关于日期的小函数

原帖由 "mrwant" 发表:
expr $dd : "^.$" > /dev/null && dd=0$dd
能给解释一下吗


判断dd是否是一个字符组成,如果是,则dd=0$dd
即如果dd=1-9,应该让dd=01-09.

论坛徽章:
0
9 [报告]
发表于 2003-02-08 17:15 |只看该作者

俺写了几个关于日期的小函数

俺都活了10223天了,不知道该高兴还是伤心.

论坛徽章:
0
10 [报告]
发表于 2003-02-08 17:59 |只看该作者

俺写了几个关于日期的小函数

原帖由 "mrwant" 发表:
expr $dd : "^.$" > /dev/null && dd=0$dd
能给解释一下吗


意思我猜到了
不知 : "^.$"这是利用了什么语法
是C shell吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP