C# 關於使用DateTime進行時間比較的精度問題
從今天起,博主打算開始寫一些博客,記錄一下在開發過程中遇到的問題並存檔,後面還會跟上補充之前在開發過程中遇到過的諸多問題的解決方案
問題描述
在寫一個定時程序時發現將設定的時間和當前時間進行比較時出錯,經查閱文檔發現DateTime
對象的精度精確到毫秒,但是我的程序設定時間的級別在秒(即用一個Timer
每秒檢查一次時間是否到,由於Timer
的間隔設定過短會影響程序性能,且精度在低於1000毫秒非常差),因此一些提供的諸如CompareTo()
和Equals()
再或者直接用==
來比較的方法都會因爲毫秒精度上比較失效。
解決方法
使用DateTime
對象的ToString()
方法,將要比較的兩個DateTime
對象雙方格式化成同樣形式的字符串,再進行字符串比較。代碼如下:
private void tmrCurTime_Tick(object sender, EventArgs e)
{
DateTime dt = DateTime.Now;
tsslCurTime.Text = $"當前時間:{dt}";
if (IsInSetDown)
{
if (dt.ToString("yyyy-MM-dd HH:mm:ss") == dtpDownTime.Value.ToString("yyyy-MM-dd HH:mm:ss"))
{
MessageBox.Show("時間到", "時間到", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}