ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用Epoch进行日期时间转换和计算的几个Shell小函数

使用Epoch进行日期时间转换和计算的几个Shell小函数

Linux操作系统 作者:中原小伙 时间:2016-02-16 10:13:48 0 删除 编辑
原文地址:http://bbs.chinaunix.net/thread-1772999-1-1.html
当你遇到一个date命令不给力的系统时,可以试试这几个小函数。

#日期转天数
  1. function date2days {
  2.     echo "$*" | awk '{
  3.         z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
  4.         j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
  5.         print j
  6.     }'
  7. }
  8. date2days `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`
#天数转日期
  1. function days2date {
  2.     echo "$1" | awk '{
  3.         a=$1+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
  4.         d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
  5.         dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
  6.         printf ("%4d-%02d-%02d\n",yy,mm,dd)
  7.     }'
  8. }
  9. days2date 14839
#日期转分钟
  1. function date2minutes {
  2.     echo "$*" | awk '{
  3.         z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
  4.         j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
  5.         j=j*1440+$4*60+$5
  6.         print j
  7.     }'
  8. }
  9. date2minutes `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`
#分钟转日期
  1. function minutes2date {
  2.     echo "$1" | awk '{
  3.         i=$1; nn=i%60; i=int(i/60); hh=i%24; dd=int(i/24); i=int(i/24);
  4.         a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
  5.         d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
  6.         dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
  7.         printf ("%4d-%02d-%02d %02d:%02d\n",yy,mm,dd,hh,nn)
  8.     }'
  9. }
  10. minutes2date 21369299
#日期转秒数
  1. function date2seconds {
  2.     echo "$*" | awk '{
  3.         z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
  4.         j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
  5.         j=j*86400+$4*3600+$5*60+$6
  6.         print j
  7.     }'
  8. }
  9. date2seconds `echo "2010-08-18 18:59:19" | sed 's/-/ /g;s/:/ /g'`
#秒数转日期
  1. function seconds2date {
  2.     echo "$1" | awk '{
  3.         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);
  4.         a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
  5.         d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
  6.         dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
  7.         printf ("%4d-%02d-%02d %02d:%02d:%02d\n",yy,mm,dd,hh,nn,ss)
  8.     }'
  9. }
  10. seconds2date 1282157959
#日期转毫秒
  1. function date2milliseconds {
  2.     echo "$*" | awk '{
  3.         z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
  4.         j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
  5.         j=j*86400+$4*3600+$5*60+$6
  6.         printf ("%d%s\n",j,$7)
  7.     }'
  8. }
  9. date2milliseconds `echo "2010-08-18 18:59:19.073" | sed 's/-/ /g;s/:/ /g;s/\./ /g'`
#毫秒转日期
  1. function milliseconds2date {
  2.     echo "$1" | awk '{
  3.         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);

  4. i=int(i/24);
  5.         a=i+2472632; b=int((4*a+3)/146097); c=int((-b*146097)/4)+a;
  6.         d=int((4*c+3)/1461); e=int((-1461*d)/4)+c; m=int((5*e+2)/153);
  7.         dd=-int((153*m+2)/5)+e+1; mm=int(-m/10)*12+m+3; yy=b*100+d-4800+int(m/10);
  8.         printf ("%4d-%02d-%02d %02d:%02d:%02d.%03d\n",yy,mm,dd,hh,nn,ss,ms)
  9.     }'
  10. }
  11. milliseconds2date 1282157959073

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24946452/viewspace-1989368/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2013-08-01

  • 博文量
    1
  • 访问量
    1080