如何修改Linux的系统时间

为什么写此文章: 就为这一个问题硬折磨了一下午.

如果你有这么一件事要做,那么没经历过的人一定会郁闷,这就是为什么写下的理由.

假设我们已经知道要设置的时间为Year,Mon,Day,Hour,Min,Sec,因此需要写这么一个修改Linux系统时间的函数:

这里的年是指没有千位和百位的,比如2013,这里输入为13

void SetSysTimeInfo(unsigned long Year,unsigned long Mon,unsigned long Day,                    unsigned long Hour,unsigned long Min,unsigned long Sec){printf("DateTime1:%d-%d-%d %d:%d:%d\n",Year,Mon,Day,Hour,Min,Sec);struct tm time ={0};time.tm_sec =Sec;time.tm_min =Min;time.tm_hour =Hour;time.tm_mday =Day;time.tm_mon =Mon-1;//settimeofday的月份范围为0~11time.tm_year =Year+2000-1900;//settimeofday的年是从1900开始计算的,1900年为0time.tm_wday =GetDayofYear(Year,Mon,Day);//其实这里也可以不设置time.tm_yday =GetWeekDay(Year,Mon,Day);//其实这里也可以不设置time.tm_isdst =0;//其实这里也可以不设置time_t time1 =mktime(&time);printf("time1=%d\n",time1);struct timeval time2={0};time2.tv_sec =time1;time2.tv_usec =0;int ret =settimeofday(&time2,NULL);printf("ret=%d\n",ret);if(ret <0){perror("settimeofday err");}        //读取设置好的年月日时分秒struct timeval time3={0};gettimeofday(&time3,NULL);printf("time3=%ld\n",time3.tv_sec);struct tm *ptm;ptm =localtime(&time3.tv_sec);        //同理,年和月得经过逆运算还原printf("DateTime2:%d-%d-%d %d:%d:%d\n",ptm->tm_year+1900-2000,ptm->tm_mon+1,ptm->tm_mday,ptm->tm_hour,ptm->tm_min,ptm->tm_sec);}

上面GetDayofYear为计算当前日期为一年中的第几天,GetWeekDay为计算日期为星期天.函数分别如下所示:

//根据年月日计算这年中第几天static int GetDayofYear(int year,int mon,int day){int d =0;year +=2000;if((year%4==0 &&year%100!=0)||(year%400==0))//闫年{switch(mon){case 1:d+=0;break;case 2:d+=31;break;case 3:d+=60;break;case 4:d+=91;break;case 5:d+=121;break;case 6:d+=152;break;case 7:d+=182;break;case 8:d+=213;break;case 9:d+=244;break;case 10:d+=274;break;case 11:d+=305;break;case 12:d+=335;break;}}else//平年{switch(mon){case 1:d+=0;break;case 2:d+=31;break;case 3:d+=59;break;case 4:d+=90;break;case 5:d+=120;break;case 6:d+=151;break;case 7:d+=181;break;case 8:d+=212;break;case 9:d+=243;break;case 10:d+=273;break;case 11:d+=304;break;case 12:d+=334;break;}}d+=day;printf("d=%d\n",d);return d;}

GetWeekDay函数如下定义:

//根据年月日计算是星期几static int GetWeekDay(int year,int mon,int day){year +=2000;int y =year%100;int c =20;int m =mon;int d =day;int w;if(mon ==1){m =13;y =(year-1)%100;c =(year-1)/100;}else if(mon ==2){m =14;y =(year-1)%100;c =(year-1)/100;}w =y+(int)(y/4)+(int)(c/4)-2*c+(int)(26*(m+1)/10)+d-1; //这是一个标准公式w %=7;printf("w=%d\n",w);return w;}

记录下此经历.无论身处何处,只要有一颗放松而美好的心态,生活便是美好!

如何修改Linux的系统时间

相关文章:

你感兴趣的文章:

标签云: