免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 16811 | 回复: 14

[日期时间] 使用Epoch进行日期时间转换和计算的几个Shell小函数 [复制链接]

论坛徽章:
30
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3719周年集字徽章-19
日期:2019-08-27 13:31:2619周年集字徽章-CU
日期:2019-09-08 23:26:25
发表于 2010-08-25 00:08 |显示全部楼层
本帖最后由 Shell_HAT 于 2013-03-13 11:53 编辑

本帖最后由 Shell_HAT 于 2011-05-19 00:17 编辑

当你遇到一个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
复制代码
应用实例:

计算今天的N天之后的日期
http://bbs.chinaunix.net/viewthread.php?tid=1799398&page=1#pid12986095
计算某天的N天之后的日期
http://bbs.chinaunix.net/viewthread.php?tid=1666874&page=2#pid12605722
计算上一个星期的全部日期
http://bbs.chinaunix.net/viewthread.php?tid=1754212&page=3#pid12579440
日期时间转换成毫秒
http://bbs.chinaunix.net/viewthread.php?tid=1770107&page=2#pid12715151
日期时间转换成秒
http://bbs.chinaunix.net/viewthread.php?tid=1772312&page=1#pid12737986
判断一个数字是否为合法日期
http://bbs.chinaunix.net/viewthread.php?tid=1792476&page=2#pid12918659
计算10分钟之前的时间
http://bbs.chinaunix.net/viewthread.php?tid=1842859&page=1#pid13341073
计算指定日期和当前系统日期之家相差多少天
http://bbs.chinaunix.net/viewthread.php?tid=2316841&page=1#pid15618823
上个星期周一的日期
http://bbs.chinaunix.net/viewthread.php?tid=3680220&page=1#pid21909156

论坛徽章:
0
发表于 2010-08-25 08:13 |显示全部楼层
沙发?

无精可加

论坛徽章:
0
发表于 2010-08-25 08:18 |显示全部楼层
看来 我很勤快~~,默默的潜水

论坛徽章:
0
发表于 2010-08-25 09:55 |显示全部楼层
这个要顶!!!顶完学习

论坛徽章:
0
发表于 2011-05-11 03:10 |显示全部楼层

很好.顶起来.

论坛徽章:
0
发表于 2011-05-18 10:14 |显示全部楼层
为啥没加精?

论坛徽章:
0
发表于 2012-02-06 15:35 |显示全部楼层
太方便了

论坛徽章:
0
发表于 2012-02-06 15:47 |显示全部楼层
这个好啊-。-各种函数小工具

论坛徽章:
3
天蝎座
日期:2013-11-11 10:18:392015年亚洲杯之沙特阿拉伯
日期:2015-04-06 15:51:08CU十四周年纪念徽章
日期:2017-01-07 22:56:29
发表于 2012-10-09 08:52 |显示全部楼层
这是不是就是传说中的积累?

论坛徽章:
0
发表于 2013-05-14 14:29 |显示全部楼层
果断收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

PostgreSQL中国大会,早鸟票抢购!

PostgreSQL中国大会,早鸟票抢购!
2019年11月29~11月30日,由 PostgreSQL中文社区与ITPUB联合主办的第九届《PostgreSQL 中国技术大会》将在北京隆重召开。PostgreSQL 作为功能最强的的开源关系型数据库之一,得到了越来越多企业的推广和运用,也越来越受到广大技术爱好者的欢迎和重视。这将是 PostgreSQL 的又一次交流盛会。




----------------------------------------

点击报名>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP