整理一下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);
在标准时间格式和时间戳之间的转换中,有一个转换介质或者说是桥梁:时间结构体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);