當然不是通過指令,指令的話要好好看下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;
suseconds_t tv_usec;
};
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;
int tz_dsttime;
};
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;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
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);
}