linux下修改系统时间

当然不是通过命令,命令的话要好好看下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);
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值