Re: [VBA ] 計時器Timer
看板Visual_Basic作者MOONRAKER (㊣企業號OGC-1701)時間13年前 (2010/09/02 15:55)推噓2(2推 0噓 5→)留言7則, 4人參與討論串2/2 (看更多)
※ 引述《xu3jp68 (信箱爆炸..XD)》之銘言:
: ◆ From: 122.124.175.52
: → MOONRAKER:timer每到午夜歸零。
: → xu3jp68:不好意思,所以我該怎麼改才可以知道實際的時間呢?
: → xu3jp68:如果跑不到1天,可以從-33XXX反推回去求解時間嗎?
這個你畫一畫數線不就知道了
考慮程式開始執行時取一次 timer 為 t1 , 結束時再取一次為 t2
t1 t2
▏ ▏
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
這樣當然 t2 - t1 就得到程式執行時間 (elapsed time) 。
但是中間如果跨到午夜,程式結束時的日時間 (day time) 又小於開始時的日時間
那 t2 - t1 就會得到負值:
t1 00:00 t2
▏ ▏ ▏
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
daytime 20:00 03:00
t2 - t1 = 10800 - 72000 = -61200
而正確的執行時間從上圖也很容易得出來:
t_e = 86400 - t1 + ( t2 - 0 )
= ( t2 - t1 ) + 86400
所以只要把以上「負時距」的值加上86400就是正確的執行時間。
還有一種狀況是,程式執行可能超過一天,那這時 t2 - t1 很可能得到一個
正值甚至0,連有沒有跨日都不能確認。
t1 00:00 t2
▏ ▏ ▏
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
daytime 22:00 22:00
解決這個問題也很簡單…記錄開始執行和結束執行時的now()就結了。你從這
兩個值可以知道中間過了多少日曆天,再依此決定 t2 - t1 要加多少秒數來
修正。
考慮程式開始執行時取一次 now() 為 n1 , 結束時再取一次為 n2
那麼
t_e = ( t2 - t1 ) + ╘ n2 - n1 ╛ * 86400
你可以直接把兩次取的 now() 相減,結果就是一個浮點數,意義為日數。當
然相減的結果還要無條件捨去取整數,要怎麼寫你自己可以查到。
--
Google 關鍵字 : MPFC-TCP / 殺人笑話 / 包租婆也有過當羅莉的時候
Youtube關鍵字 : 脫衫脫褲 / 傻蛋奧運 / 宗教審訊 / 買張床 / 單車超人 / 謳歌金錢
*美髮師登山隊 http://tinyurl.com/dm6lh3 *Ypres 1914 http://tinyurl.com/b432jb
[蒙帝派松正體中文計畫] http://www.youtube.com/user/JamesBondXD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.120.168.228
→
09/02 17:19, , 1F
09/02 17:19, 1F
→
09/03 15:32, , 2F
09/03 15:32, 2F
→
09/03 15:32, , 3F
09/03 15:32, 3F
→
09/03 15:33, , 4F
09/03 15:33, 4F
推
09/03 20:30, , 5F
09/03 20:30, 5F
→
09/04 17:09, , 6F
09/04 17:09, 6F
推
09/07 08:07, , 7F
09/07 08:07, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):