今天查找了一下linux获取及设置系统时间的函数,并做了以下总结:
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <string.h>
int time_fun()
{
time_t t_t;
struct tm * time_info;
char time_str [40];
time(&t_t );
/*将t_t所指的time_t结构中的信息转换成真实
*世界所使用的时间日期表示方法,然后将结果由结构tm返回
*头文件为time.h。*/
time_info = localtime(&t_t );
// 结构tm的定义为
// struct tm
// {
// int tm_sec; /*代表目前秒数,正常范围为0-59,但允许至61秒*/
// int tm_min; /*代表目前分数,范围0-59*/
// int tm_hour; /*从午夜算起的时数,范围为0-23*/
// int tm_mday; /*目前月份的日数,范围01-31*/
// int tm_mon; /*代表目前月份,从一月算起,范围从0-11 1月为0*/
// int tm_year; /*从1900 年算起至今的年数*/
// int tm_wday; /*一星期的日数,从星期一算起,范围为0-6 星期日为0*/
// int tm_yday; /*从今年1月1日算起至今的天数,范围为0-365*/
// int tm_isdst;/*日光节约时间的旗标*/
// };
printf("localtime:\n");
printf("tm_sec: %d tm_min: %d tm_hour: %d \n
tm_mday: %d tm_mon: %d tm_year: %d \n
tm_wday: %d tm_yday: %d tm_isdst: %d \n",
time_info->tm_sec, time_info->tm_min, time_info->tm_hour,
time_info->tm_mday, time_info->tm_mon, time_info->tm_year,
time_info->tm_wday, time_info->tm_yday, time_info->tm_isdst);
printf("\n");
printf("mktime:%d\n", (int)mktime(time_info));
printf("\n");
strftime(time_str,sizeof(time_str),"%Y-%m-%d %H:%M:%S",time_info);/**/
printf ("%s\n", time_str);
printf ("%s", asctime(time_info)); /*asctime(time_info):将时间和日期以字符串格式表示*/
printf ("%s", ctime(&t_t)); /* ctime(&t_t):将时间和日期以字符串格式表示*/
struct timeval tv;
// struct timeval
// {
// time_t tv_sec; /* Seconds,为Epoch时间(初始时间)到创建 struct timeval时的秒数*/
// suseconds_t tv_usec; /* Microseconds,微秒数,即秒后面的零头 */
// };
struct timezone tz;
// struct timezone
// {
// int tv_minuteswest; /*格林威治时间往西方的时差*/
// int tv_dsttime; /*时间的修正方式*/
// };
/*得到当前时间和时区,分别写到tv和tz中,
*如果tz为NULL则不向tz写入
*头文件为sys/time.h*/
gettimeofday(&tv, &tz);
printf("tv_sec:%d\n", (int)tv.tv_sec);
printf("tv_usec:%ld\n", (long)tv.tv_usec);
printf("tz_minuteswest:%d\n", tz.tz_minuteswest);
printf("tz_dsttime:%d\n", tz.tz_dsttime);
tv.tv_sec = 0;
tv.tv_usec = 0;
/*设置系统时间为Epoch时间,
*root权限才可以设置*/
settimeofday(&tv, &tz);
return 0;
}