Chinaunix首页 | 论坛 | 博客
  • 博客访问: 346614
  • 博文数量: 38
  • 博客积分: 1289
  • 博客等级: 中尉
  • 技术积分: 533
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-10 22:30
个人简介

Good Good Study. Day Day Up.

文章分类

全部博文(38)

文章存档

2018年(1)

2016年(3)

2015年(12)

2014年(7)

2013年(10)

2012年(5)

分类: LINUX

2013-09-05 15:14:41

当你遇到一个date命令不给力的系统时,可以试试这几个小函数。

#日期转天数
function date2days {
    echo "$*" | awk '{
        z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
        j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
        print j
    }'
}
date2days `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`

#天数转日期
function days2date {
    echo "$1" | awk '{
        a=$1+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
        d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
        dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
        printf ("%4d-%02d-%02d\n",yy,mm,dd)
    }'
}
days2date 14839

#日期转分钟
function date2minutes {
    echo "$*" | awk '{
        z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
        j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
        j=j*1440+$4*60+$5
        print j
    }'
}
date2minutes `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`

#分钟转日期
function minutes2date {
    echo "$1" | awk '{
        i=$1; nn=i%60; i=int(i/60); hh=i%24; dd=int(i/24); i=int(i/24);
        a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
        d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
        dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
        printf ("%4d-%02d-%02d %02d:%02d\n",yy,mm,dd,hh,nn)
    }'
}
minutes2date 21369299

#日期转秒数
function date2seconds {
    echo "$*" | awk '{
        z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
        j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
        j=j*86400+$4*3600+$5*60+$6
        print j
    }'
}
date2seconds `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`

#秒数转日期
function seconds2date {
    echo "$1" | awk '{
        i=$1; ss=i%60; i=int(i/60); nn=i%60; i=int(i/60); hh=i%24; dd=int(i/24); i=int(i/24);
        a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
        d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
        dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
        printf ("%4d-%02d-%02d %02d:%02d:%02d\n",yy,mm,dd,hh,nn,ss)
    }'
}
seconds2date 1282157959

#日期转毫秒
function date2milliseconds {
    echo "$*" | awk '{
        z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
        j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
        j=j*86400+$4*3600+$5*60+$6
        printf ("%d%s\n",j,$7)
    }'
}
date2milliseconds `echo "2010-08-18 18:59:19.073" | sed 's/-/ /g;s/:/ /g;s/\./ /g'`

#毫秒转日期
function milliseconds2date {
    echo "$1" | awk '{
        i=$1; ms=i%1000; i=int(i/1000); ss=i%60; i=int(i/60); nn=i%60; i=int(i/60); hh=i%24; dd=int(i/24); i=int(i/24);
        a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
        d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
        dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
        printf ("%4d-%02d-%02d %02d:%02d:%02d.%03d\n",yy,mm,dd,hh,nn,ss,ms)
    }'
}
milliseconds2date 1282157959073

应用实例:

计算今天的N天之后的日期

计算某天的N天之后的日期

计算上一个星期的全部日期

日期时间转换成毫秒

日期时间转换成秒

判断一个数字是否为合法日期

计算10分钟之前的时间

计算指定日期和当前系统日期之家相差多少天

上个星期周一的日期

阅读(1647) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~