c++编程之时间使用

对于时间, C 阐述了这样几种概念:
 1. Clock Tick: CPU时钟计时单元
 2. Calender Time: 日历时间
 3. Broken-down Time: 分解时间
 4. Local Time: 本地时间
 5. Coordinate Universal Time: 协调世界时
  我试用了前两种计时方法:它们得到的结果都是以s为单位。无法精确到ms。后发现原来是因为它们得到的时间
都是整数型。相除后就是只取整了。例如下面的第一种方法:
clock_t clock_tick=clock();
double seconds = clock_tick/CLOCKS_PER_SECOND;
如果得到clock_tick=160
得到的seconds=0
而我需要的是精确值,其实就是进行下强制类型转换的。
即将上面的第二句代码重新写为:
double seconds = (double)clock_tick/(double)CLOCKS_PER_SECOND;
这样就可以得到精确值了。
2012.5.25
我又试了下我的omnet上面是要把CLOCKS_PER_SECOND写成CLOCKS_PER_SEC才可以正常使用
CLOCKS_PER_SECOND说是没有定义。
不知道其他的软件上是怎么样的。
 前面三种可以理解为元数据类型, 分别对应于: clock_t, time_t, tm.
 而后面两种只是前三种类型的地域性表示.
 
 第一种, Clock Tick(CPU时钟计时单元)
    它是一种时间计量单位, 可以和秒进行换算.
    clock_t clock_tick = clock(); // 表示程序运行以来到执行完该语句所耗费
    的CPU时钟计时单元个数
    long seconds = clock_tick / CLOCKS_PER_SECOND; // 换算为秒

 第二种, Calender Time(日历时间)
    它表示的是某一时间点距离原始时间点的秒数, 即它是以秒为单位的时间间隔.
    而这个原始时间点, 不同的系统表示不同, 一般为1970年1月1日0时0分0秒, 而
    在.Net2005中为1899年12月30日0时0分0秒.
    // 表示当前时间点距离原始时间点的秒数
    time_t calender_time = time(NULL);
    // 辅助函数
    // double difftime(time_t time2, time_t time1)
    // 计算二者的秒数之差
 
 第三种, Broken-down Time(分解时间)
    它表示的是结构体, 成员包括年月\日时\分秒(其他省略).
    // 先得到当前的日历时间
    time_t calender_time = time(NULL);
    // 将日历时间转换为当前时区的分解时间
    tm* local_time = localtime(&calender_time);
    // 这里提到了当前时区的分解时间, 即本地时间. 因为日期时间
    // 因时区的不同而各异,
    // 例如: 北京位于东八区.
    // 格林威治时间是统一的世界时间, 即上面提到的协调世界时间
    // 这里将日历时间转换成格林威治式的分解时间
    tm* utc_time = gmtime(&calender_time);
 
 三种时间元类型给了我们很好的灵活性, 但也有值得注意的地方:
    1. 可以直接获取当前的日历时间.
    time_t calender_time = time(NULL);

    2. 只能间接获取当前的分解时间, 借助localtime()函数进行转换
    time_t calender_time = time(NULL);
    tm* local_date = localtime(&calender_time);

    3. 日历时间可以转化为日期的字符串表示
    time_t calender_time;
    // 赋值省略
    char* szDate = ctime(calender_time);

    4. 分解时间可以转化为日期的字符串表示
    tm* date;
    // 赋值省略
    char* szDate = asctime(date);

    5. 分解时间可以直接转换为日历时间
    tm date;
    // 赋值省略
    time_t time = mktime(&date);

    6. 日历时间可以转换为分解时间
    time_t time;
    // 赋值省略
    tm* date = localtime(&time);

    7. 分解时间可以格式化输出
    // 借助strftime函数以及printf等函数 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值