免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4798 | 回复: 17
打印 上一主题 下一主题

[求助]linux下关于取系统时间的问题(问题细化了) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-12 09:42 |只看该作者 |倒序浏览

  1. #include <time.h>
  2. #include <stdio.h>

  3. int dateGet(char *sDate)
  4. {
  5.         long nNow,nowDate;
  6.         time_t ltime;
  7.         struct tm* tmNow;

  8.         time( &ltime );
  9.         tmNow = gmtime( &ltime );
  10.         printf("%s",asctime(gmtime(&ltime)));
  11.         nNow = (tmNow->tm_hour+8)*10000+tmNow->tm_min*100+tmNow->tm_sec;
  12.         printf("[%ld]\n",nNow);
  13.         nowDate=(tmNow->tm_year+1900)*10000+(tmNow->tm_mon+1)*100+tmNow->tm_mday;
  14.         printf("[%d][%d][%d]\n",tmNow->tm_year,tmNow->tm_mon,tmNow->tm_mday);
  15.         sprintf(sDate,"%d",nowDate);

  16.         return(0);
  17. }

  18. int main(int argc,char **argv)
  19. {
  20.         char strSysDate[10];
  21.         dateGet(strSysDate);
  22.         printf("now date is [%s]\n",strSysDate);
  23.         return(0);
  24. }
复制代码


  1. 8:00:00前程序取到的时间和日期和date命令看到的不一致
  2. 而8:00:00后就一致了
复制代码

[ 本帖最后由 rxpmcb 于 2007-4-12 10:31 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-04-12 09:48 |只看该作者
gtime 是国际标准时间

论坛徽章:
0
3 [报告]
发表于 2007-04-12 09:52 |只看该作者
原帖由 samuel1004 于 2007-4-12 09:48 发表
gtime 是国际标准时间

意识是我机器上有两个时间
一个是国际标准时间
一个是我本地时间
我用date -s命令修改的是我本机时间?

论坛徽章:
0
4 [报告]
发表于 2007-04-12 09:54 |只看该作者
时间不同是因为未进行时区转换。
显示格式不同是因为未通过gettext取当前系统的.mo文件进行翻译

论坛徽章:
0
5 [报告]
发表于 2007-04-12 09:56 |只看该作者
原帖由 一梦如是 于 2007-4-12 09:54 发表
时间不同是因为未进行时区转换。
显示格式不同是因为未通过gettext取当前系统的.mo文件进行翻译

可这里的tmNow->tm_mday应该是12 而结果确是11

论坛徽章:
0
6 [报告]
发表于 2007-04-12 10:00 |只看该作者
还有夏时制的影响吧
设置时区大概是tzset(3),我没用过,仅供参考。

论坛徽章:
0
7 [报告]
发表于 2007-04-12 10:01 |只看该作者
想找到问题解决办法,最简单即
  1. ltrace date
  2. strace date
复制代码

论坛徽章:
0
8 [报告]
发表于 2007-04-12 10:02 |只看该作者
原帖由 一梦如是 于 2007-4-12 10:00 发表
还有夏时制的影响吧
设置时区大概是tzset(3),我没用过,仅供参考。

我希望能取到正确的系统时间,也就是date命令看到的时间,不知道该怎么实现?

论坛徽章:
0
9 [报告]
发表于 2007-04-12 10:05 |只看该作者
printf("%s",asctime(localtime(&ltime)));

这样不就可以么?

论坛徽章:
0
10 [报告]
发表于 2007-04-12 10:11 |只看该作者
原帖由 samuel1004 于 2007-4-12 10:05 发表
printf("%s",asctime(localtime(&ltime)));

这样不就可以么?

实验了下,加入这条语句导致代码下面的输出也发生了改变(取到正确的日期)

我发现我的代码在八点前取到的是11号,八点后就是12号
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP