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;
}
}

你可能感兴趣的:(NET)