c标准时间与时间戳转换

整理一下c中关于标准时间格式和时间戳之间的相互转换。

在标准时间格式和时间戳之间的转换中,有一个转换介质或者说是桥梁:时间结构体tm。
对于两者的转换,都需要首先转换为tm结构体,再通过自带的函数即可转换成想要的格式。

一、标准时间格式->tm->时间戳:
1.首先把标准时间格式转换为tm时间结构体:
通过atoi函数可获取标准时间格式中的年月日时分秒;
再把年-1970,月-1,即可赋值到tm中。
2.然后通过mktime函数把tm时间结构体转换为时间戳:
(int)mktime(&tm);  

二、时间戳->tm->标准时间格式:
1.首先把时间戳转换为tm时间结构体:
time_t tick = (time_t)stampTime;//stampTime为int型的时间戳,转为time_t型数据
tm = *localtime(&tick);
2.然后通过strftime函数把tm时间结构体转换为标准时间:
strftime(std, sizeof(std), "%Y-%m-%d %H:%M:%S", &tm);
其中std为字符串,"%Y-%m-%d %H:%M:%S"为想要输出的格式。

以下为例(转):
1,标准时间准换成时间戳
int standard_to_stamp(char *str_time)  
{  
        struct tm stm;  
        int iY, iM, iD, iH, iMin, iS;  

        memset(&stm,0,sizeof(stm));  
        iY = atoi(str_time);  
        iM = atoi(str_time+5);  
        iD = atoi(str_time+8);  
        iH = atoi(str_time+11);  
        iMin = atoi(str_time+14);  
        iS = atoi(str_time+17);  

        stm.tm_year=iY-1900;  
        stm.tm_mon=iM-1;  
        stm.tm_mday=iD;  
        stm.tm_hour=iH;  
        stm.tm_min=iMin;  
        stm.tm_sec=iS;  

        /*printf("%d-%0d-%0d %0d:%0d:%0d\n", iY, iM, iD, iH, iMin, iS);*/   //标准时间格式例如:2016:08:02 12:12:30
        return (int)mktime(&stm);  
}  

2,时间戳转换成标准时间
typedef struct times
{
        int Year;
        int Mon;
        int Day;
        int Hour;
        int Min;
        int Second;
}Times;

Times stamp_to_standard(int stampTime)
{
        time_t tick = (time_t)stampTime;
        struct tm tm; 
        char s[100];
        Times standard;

        //tick = time(NULL);
        tm = *localtime(&tick);
        strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", &tm);
        printf("%d: %s\n", (int)tick, s); 

        standard.Year = atoi(s);
        standard.Mon = atoi(s+5);
        standard.Day = atoi(s+8);
        standard.Hour = atoi(s+11);
        standard.Min = atoi(s+14);
        standard.Second = atoi(s+17);
    
        return standard;
}

3,如何获取系统标准时间
time_t rawtime ; 
struct tm * timeinfo; 
time ( &rawtime ); 
timeinfo = localtime ( &rawtime ); 
其中:
int Year = timeinfo->tm_year+1900;
int Mon = timeinfo->tm_mon+1;
其余日,时,分,秒都不变。

4,如何获取系统当前时间戳
 time_t now;                                                                                                                     
 int unixTime = (int)time(&now);

你可能感兴趣的:(C)