转发:
VxWorks 系统时间时区设置_xiao503的博客-CSDN博客_vxworks 设置系统时间
https://blog.csdn.net/xiao503/article/details/38301821
后面添加精确到微秒的处理代码。
#include <stdio.h>
#include <sys/types.h>
#include <time.h>
int main(void)
{
time_t td;
struct timespec stime;
struct tm * ptime;
struct tm * ptime2;
char *ptr;
/*将时区设置为0时区*/
putenv("TIMEZONE=UTC::0::");
time(&td);
printf("initial:UTC == LCOAL:\n");
printf(" UTC time = %s", asctime(gmtime(&td)));
printf(" Local time = %s", asctime(localtime(&td)));
/*通过clock_gettime函数获取1970年1月1日零点零分到当前时间的秒数(还有纳米)*/
if (clock_gettime(CLOCK_REALTIME, &stime) == -1 )
{
perror("getclock");
return 0;
}
/*通过clock_settime函数将系统的时间增加一个小时*/
printf("add one hour use clock_settime:\n");
stime.tv_sec += 3600;
if (clock_settime(CLOCK_REALTIME, &stime) == -1)
{
perror("setclock");
return 0;
}
time(&td);
printf(" time(&td) = %d\n", td);
printf(" UTC time = %d\n", mktime(gmtime(&td)));
printf(" Local time = %d\n", mktime(localtime(&td)));
printf(" UTC time = %s", asctime(gmtime(&td)));
printf(" Local time = %s", asctime(localtime(&td)));
printf("\n\n");
/*将时区设置为东8时区,及北京时间,无夏令时*/
printf("set the time zone to beijin:\n");
putenv("TIMEZONE=CTT::-480::");
time(&td);
if (clock_gettime(CLOCK_REALTIME, &stime) == -1 )
{
perror("getclock");
return 0;
}
printf(" UTC time = %d\n", mktime(gmtime(&td)));
printf("clock_gettime = %d\n", stime.tv_sec);
printf(" time(&td) = %d\n", td);
printf(" Local time = %d\n", mktime(localtime(&td)));
ptime = localtime(&td);
printf(" beijin sec time = %d", mktime(ptime));
printf(" beijin time = %s", asctime(ptime));
printf(" %d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d\n",
ptime->tm_year, ptime->tm_yday, ptime->tm_mon+1, ptime->tm_mday, ptime->tm_wday,
ptime->tm_hour, ptime->tm_min, ptime->tm_sec, ptime->tm_isdst);
/*将时区设置为东8时区,及北京时间,从4月1日2点到10月1日2点为夏令时*/
printf("set Daylight:\n");
putenv("TIMEZONE=CTT::-480:040102:100102");
time(&td);
if (clock_gettime(CLOCK_REALTIME, &stime) == -1 )
{
perror("getclock");
return 0;
}
printf(" UTC time = %d\n", mktime(gmtime(&td)));
printf("clock_gettime = %d\n", stime.tv_sec);
printf(" time(&td) = %d\n", time(&td));
printf(" Local time = %d\n", mktime(localtime(&td)));
ptime2 = localtime(&td);
if(1 == ptime2->tm_isdst)
{
printf(" beijin sec time = %d", mktime(ptime2));
printf(" beijin time = %s", asctime(ptime2));
printf(" %d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d\n",
ptime2->tm_year, ptime2->tm_yday, ptime2->tm_mon+1, ptime2->tm_mday, ptime2->tm_wday,
ptime2->tm_hour, ptime2->tm_min, ptime2->tm_sec, ptime2->tm_isdst);
/*检验tm_isdst的值是否影响时间的显示*/
ptime2->tm_isdst = 0;
printf("set tm_isdst to 0:\n");
printf(" beijin sec time = %d", mktime(ptime2));
printf(" beijin time = %s", asctime(ptime2));
ptime2->tm_isdst = -1;
printf("set tm_isdst to -1:\n");
printf(" beijin sec time = %d", mktime(ptime2));
printf(" beijin time = %s", asctime(ptime2));
}
printf("\n\n");
/*将时区设置为东8时区,及北京时间,无夏令时*/
printf("set no Daylight:\n");
putenv("TIMEZONE=CTT::-480::");
time(&td);
ptime = localtime(&td);
printf(" beijin sec time = %d", mktime(ptime));
printf(" beijin time = %s", asctime(ptime));
printf(" %d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d,\t%d\n",
ptime->tm_year, ptime->tm_yday, ptime->tm_mon+1, ptime->tm_mday, ptime->tm_wday,
ptime->tm_hour, ptime->tm_min, ptime->tm_sec, ptime->tm_isdst);
printf("\n\n");
return 0;
}
#include <vxWorks.h>
#include <stdio.h>
#include <taskLib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <time.h>
#include <sys/times.h>
int showtm(void)
{
{
int i=0;
struct tm *t;
struct timeval tv;
struct timezone tz;
while(i++<20)
{
gettimeofday(&tv, &tz);
t = localtime(&tv.tv_sec);
printf("time_now:%d-%d-%d %d:%d:%d.%ld\n",
1900+t->tm_year, 1+t->tm_mon, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec);
taskDelay(sysClkRateGet()/2);
}
}
}