`
mncc
  • 浏览: 52829 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【TOM旧博客内容转移】【补】中秋时就应该发的——linux下编程基础:日期和时间(一)

阅读更多

 

来TOM上的blog挂掉了,现在准备看能找到多少。。。准备把技术相关的全部转到JAVAEYE上边来。。。恨死TOM了。。

 

 

原发表日期: 2008-10-17 09:39:53

 

linux下编程基础:日期和时间(一)

经过很长时间的赶工。。终于在中秋前几天把这些事情都弄得差不多了。。。。放松下来了。。。

看看一团乱的桌子。。。终于发现还有一本《Begining Linux Programming 3rd Edition》..打开好好的敲敲代码吧。。。

关于日期和时间:
都知道的常识:

UNIX 及Linux的时间系统是由“纪元时间”(Epoch)开始计算起,单位是秒,至于这个Epoch则是从格林威治时间1970年1月1日凌晨0点0分0 秒。这样一来系统的时间其实就是一个数字(确切的说是32为的数字,听说有的Unix是用64位的),正值表示为1970以后,负值则表示1970年以 前。(数据是从从OracleTN上找到的)

不说这个了。。。看编程:

首先一个最简单的显示系统底层时间的程序:
envtime.c
——————————————————

#include <time.h>

#include <stdio.h>

#include <unistd.h>

int main(int argc, char *argv[]){
    int i;

    time_t the_time;

    for(i = 0; i <= 10; i++){
        // 从基准时间开始计算
        the_time = time((time_t)0);
        printf("The time is %ld\n", the_time);
        // 每2秒执行一次
        sleep(2);
    }

    exit(0);
}
 



编译执行,这是结果:
The time is 1221201954
The time is 1221201956
The time is 1221201958
The time is 1221201960
The time is 1221201962
The time is 1221201964
The time is 1221201966
The time is 1221201968
The time is 1221201970
The time is 1221201972

呵呵。。。很郁闷的时间。time_t是一个在time.h中预定义的类型,我看像是一个长的数字。。。至于方法time_t time(time *tloc)则是返回一个从tloc开始计时的一个数字。不过看起来不好看罢了。

那么用这个方法可以看看运行程序的时间差了,在运行完每个步骤的时候加上一个计算时间的然后相减不就行了?

有个更好的方法:

double difftime(time_t time1, time_t time2);

这个方法的意思就是得到time1 - time2的值。。。是不是很熟悉。。。我记得我以前自己在图书馆里翻书的时候看TurboC里边的教程就有这个方法。。。很好移植的。。。。

更新一下刚才的程序:

envtime.c
——————————————————

#include <time.h>

#include <stdio.h>

#include <unistd.h>

int main(int argc, char *argv[]){
    int i;

    time_t the_time;
    time_t before_time;
    time_t after_time;

    // 默认给一个空指针,暂时不会出现问题。返回的还是从纪元时间开始的秒数
    before_time = time(NULL);

    for(i = 0; i <= 10; i++){
        // 从基准时间开始计算
        the_time = time((time_t)0);
        printf("The time is %ld\n", the_time);
        // 每2秒执行一次
        sleep(2);
    }

    after_time = time((time_t)0);

    printf("This Program strats in %ld\nEnd in %ld\n", before_time, after_time);

    printf("program use time %f sec.\n", diff(after_time, begin_time));

    exit(0);
}
 



最后的输出就变成了program use time 20.000000 sec.

是不是很不错?。。。。。


不过这种用秒计算的方式还是不爽。。。主要是看起来不爽。。。。给你一个1221203274你知道这个时间是什么时候吗?(要求精确到秒,按照YYYY-MM-DD hh:min:ss的格式输出)
所以,要换个好看一点的方法:

struct tm *gmtime(const time_t timeval);

(再续。。。。)

PS:中秋单位给发了一盒子月饼,虽然个头不大(但是很好吃),而且只有8个。。。不过盒子很好。。现在好像都是外边看着很好。。

PS:今天中午的午餐还一人给发了一个小月饼和一大板的德芙。。。。呵呵呵呵呵。。。

好长时间没有上Unix-center了。。。。。估计原来在Linux底下的编程全都忘光了。。。。。

不知道怎么才能把在上边敲得东西下下来。。。。。ftp????

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics