Chinaunix首页 | 论坛 | 博客
  • 博客访问: 749773
  • 博文数量: 176
  • 博客积分: 2548
  • 博客等级: 少校
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-29 16:36
个人简介

爱咋咋地

文章分类

全部博文(176)

文章存档

2024年(1)

2023年(17)

2022年(19)

2021年(3)

2020年(1)

2018年(1)

2017年(1)

2014年(1)

2013年(4)

2012年(11)

2011年(19)

2010年(22)

2009年(71)

2008年(5)

分类: LINUX

2010-10-10 23:08:10

C++标准中的时间

对于时间, C++阐述了这样几种概念:
 1. Clock Tick: CPU时钟计时单元
 2. Calender Time: 日历时间
 3. Broken-down Time: 分解时间
 4. Local Time: 本地时间
 5. Coordinate Universal Time: 协调世界时
 
 前面三种可以理解为元数据类型, 分别对应于: 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等函数
阅读(970) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~