linux 时间格式转换

1:头文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>     // sleep 函数头文件
#include <time.h>       // 结构体time_t和函数time
#include <sys/time.h>   // 结构体timeval和函数select,gettimeofday的头文件


2:取得当前时间 精确到秒 转换为日期形式

    time_t nowT ;      // time_t就是long int 类型
    nowT = time(0);    // 取得当前时间 ,秒级
    // time(&nowT);    // 取得当前时间 ,秒级
    // nowT = time(NULL); // 取得当前时间 ,秒级
    char strT[32];
    /* 使用 strftime 将时间格式化成字符串("YYYY-MM-DD hh:mm:ss"格式)*/
    strftime(strT, sizeof(strT), "%Y-%m-%d %H:%M:%S", localtime(&nowT));
    printf("%s\n",strT);
    strftime(strT, sizeof(strT), "%Y/%m/%d %H:%M:%S", localtime(&nowT));
    printf("%s\n",strT);

3:取得当前时间 精确到微妙 转换为日期形式

    /* 取得当前时间 精确到微妙 转换为日期形式 */
    struct timeval nowTus;
    // nowTus.tv_sec = 1; (秒)
    // nowTus.tv_usec = 100000;(微妙)
    gettimeofday( &nowTus, NULL ); // 取的当前时间秒数、 毫秒级
    // struct tm* nowTm = localtime(&nowTus.tv_sec);  
    // localtime  将秒转换为年月日时分秒格式,为非线程安全函数
    struct tm nowTm2;    // localtime
    localtime_r( &nowTus.tv_sec, &nowTm2 ); //localtime_r 为线程安全函数,建议使用。
    char strT2[32];
    snprintf(strT2, sizeof(strT2), "%04d/%02d/%02d %02d:%02d:%02d:%03dms",
            nowTm2.tm_year + 1900, nowTm2.tm_mon + 1, nowTm2.tm_mday,
            nowTm2.tm_hour, nowTm2.tm_min,nowTm2.tm_sec, nowTus.tv_usec / 1000);
    printf("%s\n",strT2); // 方法 1
    strftime(strT2, sizeof(strT2), "%Y-%m-%d %H:%M:%S", &nowTm2);
    printf("%s:%03dms\n",strT2,nowTus.tv_usec / 1000); // 方法 2

4:将"YYYY-MM-DD hh:mm:ss"格式的时间转换为秒

    char strT3[] = "2013/01/02 00:25:00";
    struct tm nowTm3;
    strptime(strT3,"%Y/%m/%d %H:%M:%S",&nowTm3); // 将"YYYY-MM-DD hh:mm:ss" 转换为tm
    time_t longT = mktime(&nowTm3); // 将 tm 转换为1970年以来的秒
    fprintf(stdout, "strT3=%s ,longT=%ld\n", strT3,(long)longT);


5:ctime 将时间转化为"Mon Nov  7 09:52:59 2016"形式

    /*ctime 将时间转化为"Mon Nov  7 09:52:59 2016"形式,加上一个换行符共25个字符*/
    time_t nowT4 = time(0);    // 取得当前时间 ,秒级
    char* pT = ctime(&nowT4);
    char strT4[26];
    memcpy(strT4, pT, 26);
    printf("ctime time is: %s", strT4);   // ctime 直接将秒转换成日期
    struct tm nowTm4;
    localtime_r( &nowT4, &nowTm4 );
    printf("asctime time is: %s", asctime(&nowTm4)); // asctime把tm 的数据转换成字符串

6:sleep select使用

    /* sleep select (设定等待时间,sleep线程内等待,select线程挂起节省CPU资源) */
    sleep(1);            // #include <unistd.h> 单位:秒
    usleep(1000000);     // #include <unistd.h> 单位:微妙

    struct timeval wait_time;
    wait_time.tv_sec = 1;                        //
    wait_time.tv_usec = 100000;                  //微妙
    // 在linux 内核2.6 以后的版本,select会清空最后一个参数的值
    // 因此若在循环体使用select的话,必须每次都赋值
    select(0, NULL, NULL, NULL, &wait_time);     //使用select等待    ,10

 

posted @ 2018-08-03 16:05  Chris83  阅读(7935)  评论(0编辑  收藏  举报