一、字符串日期时间转换为秒时间
1.第一种实现:
/*
*@param timestr 字符串日期
*@return time_t 转换后的秒数
*/
static time_t get_wtime(const char *timestr)
{
struct tm worktm;
int ret;
time_t timedigit;
bzero(&worktm,sizeof(worktm));
if (timestr == NULL)
return 0;
if ((ret =sscanf(timestr,"%d-%d-%d %d:%d:%d",
&worktm.tm_year,&worktm.tm_mon,&worktm.tm_mday,
&worktm.tm_hour,&worktm.tm_min,&worktm.tm_sec)) != 6)
return 0;
worktm.tm_year -= 1900;
if ( worktm.tm_mon )
worktm.tm_mon -= 1;
if ((timedigit = mktime(&worktm)) == -1)
return 0;
return timedigit;
}
2.第二种实现:
time_t get_strtotime(const char * timestr)
{
time_t tim;
struct tm tms;
int ret;
if(NULL == timestr)
return 0;// localtime(&time(NULL));
memset(&tms,0,sizeof(struct tm));
if(strptime(timestr,"%Y-%m-%d %H:%M:%S",&tms) != NULL)
return 0;
if(-1 == (tim = mktime(&tms)))
return 0;
return tim;
}
用的时候把"%Y-%m-%d %H:%M:%S"改成和要处理的字符串日期格式一致就可以了
二、常用时间函数
1. strptime
函数原型:char *strptime(const char *buf,const char *format, struct tm *tm);
功能:按照特定时间格式将字符串转换为时间类型。
参数:buf 时间字符串指针;format 格式字符串指针;tm 保存转换后结果的时间结构体指针;
返回值:调用成功返回 *buf最后位置,失败返回空指针。
例子:
- char fmt[] = "%Y-%m-%d-%H:%M:%S";
- char buf[] = "2000-01-01-00:00:00";
- struct tm tb;
- if (strptime(buf, fmt, &tb) != NULL)
- {
- fprintf(stdout "ok");
- }
函数原型:struct tm *localtime(const time_t *clock);
功 能: 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间,而gmtime函数转换后的时间没有经过时区变换,是UTC时间 。
返回值:返回指向tm 结构体的指针.tm结构体的时间是日历时间,tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.
例子1:
- #include <stdio.h>
- #include <stddef.h>
- #include <time.h>
- int main(void)
- {
- time_t timer;//time_t就是long int 类型
- struct tm *tblock;
- timer = time(NULL);
- tblock = localtime(&timer);
- printf("Local time is: %s\n",asctime(tblock));
- return 0;
- }
-
- 上面的例子用了asctime函数,下面这个例子不使用这个函数一样能获取系统当前时间。需要注意的是年份加上1900,月份加上1。
- #include<stdio.h>
- int main()
- {
- struct tm *t;
- time_t tt;
- time(&tt);
- t=localtime(&tt);
- printf("%4d年%02d月%02d日 %02d:%02d:%02d\n",t->tm_year+1900,t->tm_mon+1,t->tm_mday,t->tm_hour,t->tm_min,t->tm_sec);
- return 0;
- }</pre><br><br></div>
原型:struct tm *gmtime(long *clock);
功能:把日期和时间转换为格林威治(GMT)时间的函数。将参数timep 所指的time_t 结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
返回值: 返回结构tm代表目前UTC 时间
- struct tm
- {
- int tm_sec; /* Seconds. [0-60] (1 leap second) */
- int tm_min; /* Minutes. [0-59] */
- int tm_hour; /* Hours. [0-23] */
- int tm_mday; /* Day. [1-31] */
- int tm_mon; /* Month. [0-11] */
- int tm_year; /* Year - 1900. */
- int tm_wday; /* Day of week. [0-6] */
- int tm_yday; /* Days in year.[0-365] */
- int tm_isdst; /* DST. [-1/0/1]*/
- #ifdef __USE_BSD
- long int tm_gmtoff; /* Seconds east of UTC. */
- __const char *tm_zone; /* Timezone abbreviation. */
- #else
- long int __tm_gmtoff; /* Seconds east of UTC. */
- __const char *__tm_zone; /* Timezone abbreviation. */
- #endif
- };
- #include "stdio.h"
- #include "time.h"
- #include "stdlib.h"
- int main(void)
- {
- time_t t;
- struct tm *gmt, *area;
- tzset(); /*tzset()*/
- t = time(NULL);
- area = localtime(&t);
- printf("Local time is: %s", asctime(area));
- gmt = gmtime(&t);
- printf("GMT is: %s", asctime(gmt));
- return 0;
- }