Re: [VBA ] 計時器Timer

看板Visual_Basic作者 (㊣企業號OGC-1701)時間13年前 (2010/09/02 15:55), 編輯推噓2(205)
留言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
其實我發現…你好像直接記錄兩次的now()然後相減乘以
09/03 15:32, 2F

09/03 15:32, , 3F
86400就是秒數了…反正一大堆轉換都發生在最後顯示的時
09/03 15:32, 3F

09/03 15:33, , 4F
候而已,就別計較浪費CPU time的問題了…
09/03 15:33, 4F

09/03 20:30, , 5F
我覺得M大很強,M大是靠寫程式吃飯的嗎??
09/03 20:30, 5F

09/04 17:09, , 6F
本板比我強的太多了,我是匪諜。
09/04 17:09, 6F

09/07 08:07, , 7F
M大好客氣
09/07 08:07, 7F
文章代碼(AID): #1CVrYDcC (Visual_Basic)
討論串 (同標題文章)
文章代碼(AID): #1CVrYDcC (Visual_Basic)