谁告诉我这时间是啥问题?

salamchui 2009-10-29 08:09:12
问题:如下代码:两个时间结构中,一个是9月,另一个是10月,其他一模一样。
理论上val2-val1应该=30天x24x3600=2592000秒,可结果不是这样.......确少了一个小时(3600秒)。
这是为什么??

如果将两结构中的月份改成10月和11月,其结果就是正确的。???



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

struct date dt,dtt;
struct time tm,tmm;

int main(void)
{
unsigned long val1,val2,val;

dt.da_year=2009;
dt.da_mon=9;
dt.da_day=25;
tm.ti_hour=12;
tm.ti_min=30;
tm.ti_sec=30;
printf("today is %d- %d- %d %d: %d: %d\n", dt.da_day, dt.da_mon, dt.da_year, tm.ti_hour,tm.ti_min, tm.ti_sec);

/* convert date and time to unix format (number of seconds since Jan 1, 1970 */
val1=dostounix(&dt,&tm);
printf ("val1=%ld\n",val1);
getch();

dtt.da_year=2009;
dtt.da_mon=10;
dtt.da_day=25;
tmm.ti_hour=12;
tmm.ti_min=30;
tmm.ti_sec=30;
printf("today is %d- %d- %d %d: %d: %d\n", dtt.da_day, dtt.da_mon, dtt.da_year, tmm.ti_hour,tmm.ti_min, tmm.ti_sec);

/* convert date and time to unix format (number of seconds since Jan 1, 1970 */
val2=dostounix(&dtt,&tmm);
printf ("val2=%ld\n",val2);
getch();
val=val2-val1;

printf ("val=%ld\n",val);
getch();
return;
}

...全文
134 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
salamchui 2009-11-17
  • 打赏
  • 举报
回复
dostounix(&dt,&tm)這函數真出問題了!以後時間秒需轉在&dt,&tm結構的時候,最好是自己寫一個了....
我現在就是自己寫來用的解決這問題!!
salamchui 2009-10-30
  • 打赏
  • 举报
回复
我的問題還是沒解決,不過還是很感謝樓上的頂起!!
故事:我在2009年的7月份基於DOS寫了一個socket訪問時間服務器37端口來較對本機時間的程式,用於工廠生產電腦測試所用。一直能正常運行,算是完事了!可就在2009年的10月25號那天,測試組的人告訴我這時間較對比服務器慢了1小時(3600秒)。我就開始找問題.........
1:服務器時間正確,時間正確,windows其他較時程式正確較時。我這支程式運行就慢一小時。
2:當時調服務器時間為2009年9月25號,用此程式較時正確較時,改回來服務器時間,運行程式還是慢1小時。我暈了,才知是程式出問題。
3:所以用問題中的代碼驗證,才基本確定是用unixtodos(),dosunixdos()函數出的問題,但不確定,所以想請教大蝦們指點迷津。

謝謝了!!
wightmight 2009-10-29
  • 打赏
  • 举报
回复
给你查了下 你可以直接用 tm 结构体啊 干嘛用2个结构体呢
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
int tm_sec 代表目前秒数,正常范围为0-59,但允许至61秒
int tm_min 代表目前分数,范围0-59
int tm_hour 从午夜算起的时数,范围为0-23
int tm_mday 目前月份的日数,范围01-31
int tm_mon 代表目前月份,从一月算起,范围从0-11
int tm_year 从1900 年算起至今的年数
int tm_wday 一星期的日数,从星期一算起,范围为0-6
int tm_yday 从今年1月1日算起至今的天数,范围为0-365
int tm_isdst 日光节约时间的旗标
此函数返回的时间日期未经时区转换,而是UTC时间。


我没有算你的时间 如果是象你所说相差一个小时
请考虑有没有“夏时制”的情况 换另外两个相邻月份试试看
asimay 2009-10-29
  • 打赏
  • 举报
回复
多循环一个小时?
wightmight 2009-10-29
  • 打赏
  • 举报
回复
没有仔细看
有可能是“夏时制”的问题
thy38 2009-10-29
  • 打赏
  • 举报
回复
最怕算时间了,帮顶吧
jixingzhong 2009-10-29
  • 打赏
  • 举报
回复
如果只是日期增加一天呢?时间差多少?

如果月初到月底呢?

比较一下吧
wanjingwei 2009-10-29
  • 打赏
  • 举报
回复
看不出来,多试几个月,都多3600秒么
salamchui 2009-10-29
  • 打赏
  • 举报
回复
不是啦,这9月到10就相差30天(2592000秒),但运算后的结果是2595600秒,多了3600秒。
楼上的,实际运算下我的代码就更加明白了,
jackyjkchen 2009-10-29
  • 打赏
  • 举报
回复
大小月的关系?30天、31天?

69,382

社区成员

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

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