您的位置:首页 > 运维架构 > Linux

linux下修改系统时间

2012-08-20 16:06 281 查看
当然不是通过命令,命令的话要好好看下date,因为这两天的任务一直是系统时间相关,这里只是简明说说settimeofday这个函数.

NAME

gettimeofday, settimeofday - get / set time

SYNOPSIS

#include <sys/time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

int settimeofday(const struct timeval *tv, const struct timezone *tz);

DESCRIPTION

The functions gettimeofday() and settimeofday() can get and set the time as well as a timezone.

The tv argument is a struct timeval (as specified in <sys/time.h>):

struct timeval {

time_t tv_sec; /* seconds */

suseconds_t tv_usec; /* microseconds */

};

and gives the number of seconds and microseconds since the Epoch (see time(2)). The tz argu-

ment is a struct timezone:

struct timezone {

int tz_minuteswest; /* minutes west of Greenwich */

int tz_dsttime; /* type of DST correction */

};

If either tv or tz is NULL, the corresponding structure is not set or returned.

settimeofday用于修改当前系统时间(只改变系统时间,不改变硬件时钟时间,有的硬件上有RTC模块),tv表示需要设置的时间,tz表示时区。
把tm时间格式转换成tv->tv_sec:

struct tm {

int tm_sec; /* seconds */

int tm_min; /* minutes */

int tm_hour; /* hours */

int tm_mday; /* day of the month */

int tm_mon; /* month */

int tm_year; /* year */

int tm_wday; /* day of the week */

int tm_yday; /* day in the year */

int tm_isdst; /* daylight saving time */

};



The members of the tm structure are:

tm_sec The number of seconds after the minute, normally in the range 0 to 59, but can be up to

60 to allow for leap seconds.

tm_min The number of minutes after the hour, in the range 0 to 59.

tm_hour

The number of hours past midnight, in the range 0 to 23.

tm_mday

The day of the month, in the range 1 to 31.

tm_mon

The number of months since January, in the range 0 to 11.

tm_year

The number of years since 1900.

tm_wday

The number of days since Sunday, in the range 0 to 6.

tm_yday

The number of days since January 1, in the range 0 to 365.

tm_isdst

A flag that indicates whether daylight saving time is in effect at the time described.

The value is positive if daylight saving time is in effect, zero if it is not, and nega-

tive if the information is not available.

将tm格式时间转换time_t,可以用mktime()或者timegm(),因此可以设置好tm结构中的值后,用这两个函数转换,最后调用settimeofday即可:

void default_system_time()
{
struct timeval tv;
struct tm rtm;
memset(&rtm, 0, sizeof(rtm));
memset(&tv, 0, sizeof(tv));

rtm.tm_year = 70;
rtm.tm_mon = 1;
rtm.tm_mday = 1;
rtm.tm_hour = 0;
rtm.tm_min = 0;
rtm.tm_sec = 0;

/* convert tm to timeval.sec */
//tv.tv_sec = timegm(&rtm);
tv.tv_sec = mktime(&rtm);

settimeofday(&tv, NULL);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: