看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《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
xu3jp68:感謝你,非常詳細還畫圖,連天數都思考到了,真的謝謝!! 09/02 17:19
MOONRAKER:其實我發現…你好像直接記錄兩次的now()然後相減乘以 09/03 15:32
MOONRAKER:86400就是秒數了…反正一大堆轉換都發生在最後顯示的時 09/03 15:32
MOONRAKER:候而已,就別計較浪費CPU time的問題了… 09/03 15:33
necsa:我覺得M大很強,M大是靠寫程式吃飯的嗎?? 09/03 20:30
MOONRAKER:本板比我強的太多了,我是匪諜。 09/04 17:09
WorkinChina:M大好客氣 09/07 08:07