从TimeSpan说起
小編在編寫WPF程序時,需要做一個判斷:定時使用Modbus協(xié)議使用Quartz.net 定時任務(wù)讀取設(shè)備中的數(shù)據(jù),同時也使用定時任務(wù)判斷是否長時間獲取不到數(shù)據(jù)的情況,如果程序中超過一分鐘沒有獲取到數(shù)據(jù)(數(shù)據(jù)沒有更新),則認為已經(jīng)掉線。因此在類中使用了 DateTime類型數(shù)據(jù)記錄獲取數(shù)據(jù)的時間。
判斷是否在線使用了當(dāng)前時間減去獲取數(shù)據(jù)的時間,類似于這樣:
RunningTime = DateTime.MinValue; var x = DateTime.Now - RunningTime; var y = x.Minutes>1?"連接斷開":"連接正常";上述 x的類型為 TimeSpan。那么問題就從這里埋下了。
問題再現(xiàn)
出現(xiàn)問題的時間點:在不連接設(shè)備時,保持程序在運行狀態(tài),整點時間時出現(xiàn)的時候就會出現(xiàn)連接正常的狀態(tài),通過日志進行分析,發(fā)現(xiàn)整點時,分鐘為0,與時間最小值做完運算后得到的 x.Minutes的值就為 0,因此出現(xiàn)連接正常的情況。
解決方法
通過TimeSpan的文檔發(fā)現(xiàn) TimeSpan中的屬性如下:
| Days | 獲取當(dāng)前 TimeSpan 結(jié)構(gòu)所表示的時間間隔的天數(shù)部分。 |
| Hours | 獲取當(dāng)前 TimeSpan 結(jié)構(gòu)所表示的時間間隔的小時數(shù)部分。 |
| Milliseconds | 獲取當(dāng)前 TimeSpan 結(jié)構(gòu)所表示的時間間隔的毫秒數(shù)部分。 |
| Minutes | 獲取當(dāng)前 TimeSpan 結(jié)構(gòu)所表示的時間間隔的分鐘數(shù)部分。 |
| Seconds | 獲取當(dāng)前 TimeSpan 結(jié)構(gòu)所表示的時間間隔的秒數(shù)部分。 |
| Ticks | 獲取表示當(dāng)前 TimeSpan 結(jié)構(gòu)的值的刻度數(shù)。 |
| TotalDays | 獲取以整天數(shù)和天的小數(shù)部分表示的當(dāng)前 TimeSpan 結(jié)構(gòu)的值。 |
| TotalHours | 獲取以整小時數(shù)和小時的小數(shù)部分表示的當(dāng)前 TimeSpan 結(jié)構(gòu)的值。 |
| TotalMilliseconds | 獲取以整毫秒數(shù)和毫秒的小數(shù)部分表示的當(dāng)前 TimeSpan 結(jié)構(gòu)的值。 |
| TotalMinutes | 獲取以整分鐘數(shù)和分鐘的小數(shù)部分表示的當(dāng)前 TimeSpan 結(jié)構(gòu)的值。 |
| TotalSeconds | 獲取以整秒數(shù)和秒的小數(shù)部分表示的當(dāng)前 TimeSpan 結(jié)構(gòu)的值。 |
通過 TimeSpan的屬性發(fā)現(xiàn),按分鐘比較需要使用 TotalMinutes屬性才可以。
說明
在通過時間運算方法使用 TimeSpan作比較時,要特別注意。還有,有事沒事要多看相關(guān)文檔才可以。
總結(jié)
以上是生活随笔為你收集整理的从TimeSpan说起的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性能优化 = 改改代码?
- 下一篇: 2020年了,再不会Https就老了