DateTime之时间比较(CompareTo)精度问题

本文介绍了在C#中使用DateTime类进行日期比较时遇到的精度问题,并提供了将时间统一到同一精度进行比较的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


http://blog.youkuaiyun.com/didiaodezhu/article/details/5023091

如果当前时间为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; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值