免费注册 查看新帖 |

Chinaunix

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

大家帮我看下这个程序的后边几句该怎么理解? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-16 10:59 |只看该作者 |倒序浏览
a.txt文件有两列,格式如下:
  20050521091823   20050522091426
..........................
我想算出两列的时间间隔(单位:秒)
代码如下:
        yy=substr($1,1,4);
        mm=substr($1,5,2);
        dd=substr($1,7,2);
        hh=substr($1,9,2);
        mi=substr($1,11,2);
        ss=substr($1,13,2);
        t1=sprintf("%4s %2s %2s %2s %2s %2s",yy,mm,dd,hh,mi,ss);
        start=mktime(t1);
        yy=substr($2,1,4);
        mm=substr($2,5,2);
        dd=substr($2,7,2);
        hh=substr($2,9,2);
        mi=substr($2,11,2);
        ss=substr($2,13,2);
        t2=sprintf("%4s %2s %2s %2s %2s %2s",yy,mm,dd,hh,mi,ss);
        end=mktime(t2);
        dur=end-start;
        dur1=int((dur+59)/60)*8;

当算两个时间间隔,
1:dur+59 目的是什么?
2:(dur+59)/60目的是什么?
3:((dur+59)/60)*8目的是什么?

论坛徽章:
0
2 [报告]
发表于 2005-06-16 13:05 |只看该作者

大家帮我看下这个程序的后边几句该怎么理解?

不用看你的程序了,给你写一个你试试:

cat filename

20040228091823 20040228091823
20040228091823 20040301091823
20040228091823 20040301101823
20051127091853 20060301090059
20050928091820 20060301091803
20050521091829 20050522091426

程序如下:

nawk 'function daynum(y, m, d, days, i, n){
    split("31 28 31 30 31 30 31 31 30 31 30 31", days)
    n = (y - 1901) * 365 + int((y - 1901) / 4)
    if (y % 4 == 0)
        days[2]++
    for (i = 1; i < m; i++)
        n += days
    return n + d
    }
    {
        day1 = daynum(substr($1, 1, 4), substr($1, 5, 2), substr($1, 7, 2))  
        day2 = daynum(substr($2, 1, 4), substr($2, 5, 2), substr($2, 7, 2))  
    }
    {
        printf("%s %20d\n", $0, (day2 - day1) * 24 * 3600 + (substr($2, 9, 2) - substr($1, 9, 2)) * 3600 + (substr($2, 11, 2) - substr($1, 11, 2)) * 60 + (substr($2, 13, 2) - substr($1, 13, 2)))
    }' filename

运行结果如下:

20040228091823 20040228091823                         0
20040228091823 20040301091823                 172800
20040228091823 20040301101823                 176400
20051127091853 20060301090059               8120526
20050928091820 20060301091803             13305583
20050521091829 20050522091426                  86157

声明:本程序适合计算1901---2099之间的秒数。

论坛徽章:
0
3 [报告]
发表于 2005-06-16 13:14 |只看该作者

大家帮我看下这个程序的后边几句该怎么理解?

呵呵,你写的那个程序也没什么问题,我想明白下我说的:
dur1=int((dur+59)/60)*8;


1:dur+59 目的是什么?
2:(dur+59)/60目的是什么?
3:((dur+59)/60)*8目的是什么?

论坛徽章:
0
4 [报告]
发表于 2005-06-16 16:48 |只看该作者

大家帮我看下这个程序的后边几句该怎么理解?

dddddd654321,如果是闰年你的程序就有问题,还有你的程序好象不全。水平有限,看不懂,还是请烈火兄或waker等高手看看。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2005-06-17 08:27 |只看该作者

大家帮我看下这个程序的后边几句该怎么理解?

他用的是gawk的mktime函数,不应该有问题,但可能处理不了1970年以前的时间
int((dur+59)/60)是进一法求分钟
*8是啥目的楼主哥都不着,俺们咋着?

论坛徽章:
0
6 [报告]
发表于 2005-06-17 11:37 |只看该作者

大家帮我看下这个程序的后边几句该怎么理解?

原来gawk下还有mktime这样的函数,又学了一招,多谢waker。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP