c中关于时间函数的一个疑惑

NoneSec 2010-03-27 06:01:52

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

int main(void)
{
time_t t=time(NULL);
struct tm *tp1=localtime(&t),*tp2=gmtime(&t);
printf("%d\n",tp1->tm_hour); //语句1
printf("ctime=%s",ctime(&t)); //语句2
return 0;
}

以上的的语句1输出为10(假设时间为18:00),然后将语句1和语句2调换一下位置,语句1输出变成了18,这是为什么啊?是不是ctime这个函数对t进行了一些转换啊?
...全文
89 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoneSec 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linyongzuo 的回复:]
struct tm *tp1=localtime(&t),*tp2=gmtime(&t);
*tp2=gmtime(&t);//这里引用t;在经过取格林威治时间后,t->tm_hour变成了10小时。而tp1指向的是t所以就改变成了10
你换了顺序也是一样道理,先转换成了格林威治时间,然后ctime又转换为了本地时间。所以是18
[/Quote]
呵呵,忘记是一个指针参数了……3Q
cy330206 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linyongzuo 的回复:]
struct tm *tp1=localtime(&t),*tp2=gmtime(&t);
*tp2=gmtime(&t);//这里引用t;在经过取格林威治时间后,t->tm_hour变成了10小时。而tp1指向的是t所以就改变成了10
你换了顺序也是一样道理,先转换成了格林威治时间,然后ctime又转换为了本地时间。所以是18
[/Quote]
good
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 linyongzuo 的回复:]
struct tm *tp1=localtime(&t),*tp2=gmtime(&t);
*tp2=gmtime(&t);//这里引用t;在经过取格林威治时间后,t->tm_hour变成了10小时。而tp1指向的是t所以就改变成了10
你换了顺序也是一样道理,先转换成了格林威治时间,然后ctime又转换为了本地时间。所以是18
[/Quote]

up
linyongzuo 2010-03-27
  • 打赏
  • 举报
回复
struct tm *tp1=localtime(&t),*tp2=gmtime(&t);
*tp2=gmtime(&t);//这里引用t;在经过取格林威治时间后,t->tm_hour变成了10小时。而tp1指向的是t所以就改变成了10
你换了顺序也是一样道理,先转换成了格林威治时间,然后ctime又转换为了本地时间。所以是18

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧