我想寫一個幾秒後,讓電腦做出指令。
我的想法是先讀取當下的時間(存放在seconds),然後再輸入未來時間(指令要開始的時間),再來兩者相減,可是讀出的直怪怪的?????
#include <stdio.h>
#include <time.h>
int main ()
{
int seconds=time((time_t*)NULL);//讀取現在時間
int sec;
int Y,M,D,H,MIN,SEC;
printf("請輸入年分、月份、日期、幾時、幾分、幾秒=");
scanf("%d%d%d%d%d%d",&Y,&M,&D,&H,&MIN,&SEC);
int year;//多少年
int a=0;
int b=0;
for(year=1970;year<Y;year++)
{
if( year%400==0 || ( year%4==0 && year%100!= 0 ) )
{
a=a+1;
}
else
b=b+1;
}
int month2;//月份對應天數
scanf("%d",&M);
switch(M)
{
case 1:
month2=0;
break;
case 2:
month2=31;
break;
case 3:
month2=59;
break;
case 4:
month2=90;
break;
case 5:
month2=120;
break;
case 6:
month2=151;
break;
case 7:
month2=181;
break;
case 8:
month2=212;
break;
case 9:
month2=243;
break;
case 10:
month2=273;
break;
case 11:
month2=304;
break;
case 12:
month2=334;
break;
printf("month2=%d",month2);
}
sec=((a366+b365)(243600))+((month2+D)243600)+(H3600)+(MIN60)+SEC;
sec=sec-seconds;
printf("After %d seconds will shotdown the computer",sec);
return 0;
}
自己算蠻辛苦的,
現在C++還沒有DateTime物件嗎?
還是你要學的是傳統的C語言,
有需要這麼拚嗎?
我其實是自學C語言(並不知物件的方法),剛好有個同學是資工系的,有個作業是自動關機的程式。我是想用自己已知的方法去寫寫看
首先你D的地方多加了一天,
今天是9號,
你加9天就等於多了一天,
你應該要加8天.
你忘了考慮時區的問題,
系統抓的秒數是以UTC時間,
也就是會少8個小時.
綜合以上兩點,
你總共多算了32個小時 = 115200秒,
所以你的結果 115501 - 115200 = 301秒,
看來你的秒數應該也多了1...
不過也可能是計算的時候是前一秒也不一定...
另外,
3. 你是不是忘了考慮今年是平年還閏年?
不過我好奇的是,
一天為什麼是243600秒呢?
啊我懂了,
原來是 24 * 3600,
你的算術符號都不見了...
24*3600不是86400嗎-.-
求解釋..
我以為是24萬3千6百秒
謝謝,問題解決了
system( "shutdown -f -t %d",sec) ;
請問為甚麼不能直接讀取sec 的值啊?
你沒有printf啊.
我如果要加入關機指令,然後讓他讀取sec的值,請問要怎麼寫啊?
我沒試過,
不過應該是
system(printf(xxx xxx %d, rec));
這樣子試試看吧...
應該說照你原本的語法,
只是要加個printf,
否則 %d 應該會直接被當成文字吧...
p.s.
因為你把原文改掉了,
我也忘記你原本的語法是什麼了...
就算是 C 語言,也是有現成的可以用
可以參考:time.h
(大概會用到:localtime、mktime、struct tm 這幾個)
算法的問題
用你的算法
2019-10-8 22:25:00
(17897) * 24 * 3600 + (273 + 8) *24 * 3600 + 3600 * 22 + 25 * 60 = 1570659900
2019-10-8 22:20:00
(17897) * 24 * 3600 + (273 + 8) *24 * 3600 + 3600 * 22 + 20 * 60 = 1570659600
相減等於 300 = 5 分鐘
答案沒錯
但是 timestamp (我用 js new Date() 取的值)
2019-10-8 22:25:00
Number(new Date('2019-10-08 22:25:00')) / 1000 = 1570544700
2019-10-8 22:20:00
Number(new Date('2019-10-08 22:20:00')) / 1000 = 1570544400
用你的算法取的值
都會多 115200 秒 (32 分鐘小時)
然後用 timestamp 去 跟你算的值相減
也就會得到 115200(誤差值) + 300(答案) = 115500(最後算的結果)
我是不知道哪裡出問題啦
但是這種東西通常也不會手算就是
原因出在int seconds=time((time_t*)NULL);//讀取現在時間
可能是「美國時間」
可以加下面這段看一下就可以確定
你程式裡的「讀取現在時間」是不是比你手錶的時間「早 24+8 個小時(115,200秒)」
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf ( "\nCurrent local time and date: %s\n", asctime (timeinfo) );
選我正解
忘了回答「程式的問題點」
有一個問題
前面的for(year=1970;year<Y;year++)
有判斷「閏年」
而
後面的int month2;//月份對應天數
那一堆 case
沒有判斷閏年