DateTime之時間比較(CompareTo)精度問題

如果當前時間爲2007年7月19日13時56分47秒
      Convert.ToDateTime("07/07/19").CompareTo(DateTime.Now) 此時返回的值爲“-1”
      結果:Convert.ToDateTime("07/07/19")所表示的時間小於DateTime.Now
      原因
      Convert.ToDateTime("07/07/19")所表示的時間爲:2007-7-19 0:00:00
      DateTime.Now所表示的時間爲:2007-7-19 13:56:47
    
      如果我們現在只要做到精確到“日”的時間比較,那麼就要把兩個時間統到同一精度。
      方法
      Convert.ToDateTime("07/07/19").CompareTo(Convert.ToDateTime(DateTime.Now.ToString("yy/MM/dd"))) 此時返回的值爲“0”
      結果:兩個時間相等
     
      結論
      DateTime中兩個時間進行比較時,要注意兩個時間的精度。

FeedBack:
#1樓 2007-07-19 14:41 black0[未註冊用戶]
哦,原來是這樣啊
  回覆  引用    
#2樓 2007-08-02 10:57 brooklet[未註冊用戶]
Convert.ToDateTime("07/07/19").CompareTo(DateTime.Now.Date)
  回覆  引用    
#3樓[樓主] 2007-08-02 22:57 pcjim      
@brooklet
用Date獲取當前時間的日期部分也是很好的方法,謝謝指出!

  回覆  引用  查看    
#4樓 2008-01-09 11:20 qwq[未註冊用戶]
int v = dateTimePicker1.Value.CompareTo(dateTimePicker2.Value);

if (!(dateTimePicker1.Value.Equals(dateTimePicker2.Value)))
{
if (v > 0)
{
MessageBox.Show("交貨時間不能提前與接貨時間!!!");
return false;
}
}



請各位樓主發表一下意見。
(出現的問題是時對時錯)

  回覆  引用    
#5樓[樓主] 2008-01-31 06:36 PCJIM      
@qwq
dateTimePicker1.Value {2008/01/31 5:30:42} System.DateTime
Date {2008/01/31 0:00:00} System.DateTime
Day 31 int
DayOfWeek Thursday System.DayOfWeek
DayOfYear 31 int
Hour 5 int
Kind Local System.DateTimeKind
Millisecond 296 int
Minute 30 int
Month 1 int
Second 42 int
Ticks 633373542422968750 long
TimeOfDay {05:30:42.2968750} System.TimeSpan
Year 2008 int

dateTimePicker2.Value {2008/01/31 5:30:42} System.DateTime
Date {2008/01/31 0:00:00} System.DateTime
Day 31 int
DayOfWeek Thursday System.DayOfWeek
DayOfYear 31 int
Hour 5 int
Kind Local System.DateTimeKind
Millisecond 250 int
Minute 30 int
Month 1 int
Second 42 int
Ticks 633373542422500000 long
TimeOfDay {05:30:42.2500000} System.TimeSpan
Year 2008 int

以上是加斷點後監視到的dateTimePicker1.Value與dateTimePicker2.Value的值,表面上{2008/01/31 5:30:42}與{2008/01/31 5:30:42}一致,但Millisecond:296 > 250,這可能是造成“時對時錯”的原因。
修改如下:
int v = dateTimePicker1.Value.Date.CompareTo(dateTimePicker2.Value.Date);
if (!(dateTimePicker1.Value.Date.Equals(dateTimePicker2.Value.Date)))
{
if (v > 0)
{
MessageBox.Show("交貨時間不能提前與接貨時間!!!");
return false;
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章