C++编程之时间使用详解

Tags: 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等函数

本文链接:http://www.4byte.cn/learning/67105.html