linux链接时区分动态库,烦人的linux时区问题,????

本帖最后由 zhoujiawen 于 2010-11-19 20:31:02 编辑

两块板A和B之间进行通讯,时间差7个小时,A、B板子的情况如下

A:linux系统,时钟芯片RS5C372

B:uClinux系统,应用程序完全由A移植过来,包括时钟驱动,

A、B板子的硬件结构完全一样,只是CPU不一样,编译器不同,应用程序和驱动都是由A移植过来。

现在遇到时区的问题,麻烦的要死,不知道怎么去搞他,

具体流程如下:

1.开机由时钟芯片读取时间并配置系统时间,在应用程序中B(主机)给A调时,时间格式为年、月、日、时、分、秒,

A收到后进行系统时间配置,调时后,A、B界面显示时间一致,

2.A的事件传送到B,其中时间采用unsigned int time传送即秒值,B传送到A的也一样,现在问题来了,

A→B的事件,在B上显示出来多出来7个小时,如A:2010/11/19 20:15:28 在B上显示为2010/11/20 03:15:28多了7个小时

B→A的事件,在A上就少了7个小时,如B:2010/11/19 20:02:31到A上变为2010/11/19 13:02:31

A和B的处理方式一样,当事件产生时,time的值的操作为time(&time)取当前系统时间,B对time的解析方法为

struct tm *temptm;

temptm=localtime((time_t *)(&buf->time));

i+=sprintf(strTemp+i, " %.4d/%.2d/%.2d %.2d:%.2d:%.2d",

temptm->tm_year+1900,

temptm->tm_mon+1,

temptm->tm_mday,

temptm->tm_hour,

temptm->tm_min,

temptm->tm_sec);

A、B两个系统配置系统时间的方式一样如下

int config_sysytime(void)

{

int fd;

unsigned char tbuf[7];

/* Open the RTC device */

fd = open(RTC_DEVICE, O_RDONLY);

if (fd > 4) & 0x7);

tm.tm_min = tbuf[1];//(tbuf[1] & 0xf) + 10 * ((tbuf[1] >> 4) & 0x7);

tm.tm_hour = tbuf[2];//(tbuf[2] & 0xf) + 10 * ((tbuf[2] >> 4) & 0x3);

tm.tm_mday = tbuf[4];//(tbuf[4] & 0xf) + 10 * ((tbuf[4] >> 4) & 0x3);

tm.tm_mon = tbuf[5]-1;//(tbuf[5] & 0xf) + 10 * ((tbuf[5] >> 4) & 0x1) - 1;

tm.tm_year = 100+tbuf[6];//100 + (tbuf[6] & 0xf) + 10 * ((tbuf[6] >> 4) & 0xf);

tm.tm_wday = (tbuf[3] & 0x7) - 1;

tm.tm_yday = moffset[tm.tm_mon] + tm.tm_mday - 1;

tm.tm_isdst = -1;

time_t t;

t = mktime(&tm);

stime(&t);

close(fd);

return(0);

}

我估计是两个linux系统默认所处的时区不一样所导致,但不知道该怎么去解决

在B板子上的终端上输入date -R查看时区显示如下

# date -R

Fri, 19 Nov 2010 20:04:02 +0000

配置系统时间时的输出信息

Clock: old time 1970/01/01 - 00:00:05 GMT

Clock: new time 2010/11/19 - 20:01:15 GMT

A由于是老产品,没有consle查看输出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值