这是.net DateTime.Compare函数中的错误吗?
我有一个带有两个DateTimePicker控件的窗体 DateTime.Compare如果具有相同的值,但认为它们不相同,则应返回0:这是.net DateTime.Compare函数中的错误吗?,.net,vb.net,.net,Vb.net,我有一个带有两个DateTimePicker控件的窗体 DateTime.Compare如果具有相同的值,但认为它们不相同,则应返回0: ?DateTime.Compare(DatePicker.dtpFrom.Value, DatePicker.dtpTo.Value) 1 ?datepicker.dtpFrom.Value #9/20/2012 7:00:46 PM# ?DatePicker.dtpTo.Value #9/20/2012 7:00:46 PM# 我是不是想得不清楚?这肯
?DateTime.Compare(DatePicker.dtpFrom.Value, DatePicker.dtpTo.Value)
1
?datepicker.dtpFrom.Value
#9/20/2012 7:00:46 PM#
?DatePicker.dtpTo.Value
#9/20/2012 7:00:46 PM#
我是不是想得不清楚?这肯定不是.NET框架中的错误
更新
好的,我检查了毫秒值,它们是关闭的(非常轻微)。古怪!我想这与控件构造和默认值设置时的细微延迟有关
?DatePicker.dtpTo.value.ToString("fff")
"616"
?datepicker.dtpFrom.Value.ToString("fff")
"619"
我只关心日期部分,所以我解决了它:
If DateTime.Compare(DatePicker.dtpFrom.Value.Date, DatePicker.dtpTo.Value.Date) > 0 Then
MsgBox("From_Date cannot be after To_Date", MsgBoxStyle.OkOnly, "Data validation error")
比较多个DateTimePicker控件时要小心。即使没有用户编辑其默认值,其值的毫秒部分的微小差异也会导致意外的比较结果 例如,假设表单上有两个DateTimePicker控件:FromDate和ToDate,用于建立报表的日期范围 如上面的问题所示,比较这两个值以确保FromDate不大于ToDate可能会导致意外结果 如果只关心这些控件的日期部分,则可以在执行比较时通过读取value属性上的Date属性删除时间值
If DateTime.Compare(dtpFrom.Value.Date), DateValue(dtpTo.Value.Date) > 0 Then
{invalid range error message}
要检查,值1表示dtpFrom.value大于dtpTo
我还建议两个日期之间有一到两毫秒的差异,因为即使到了第二秒,它们也可能不一样
我建议比较.ToString(“yyyy-MM-dd-HH:MM:ss”)值,以了解毫秒差异
更新
在评论之后,这里有一个更好的建议,可以去掉毫秒
dateTime.AddTicks(-(dateTime.Ticks%TimeSpan.TicksPerSecond))代码>我同意马特的观点。>0不是相等性测试。如果你要回答自己的问题,正确的方式是将答案作为答案发布。>我同意马特的观点。>0不是相等性测试。是的,我不是在测试平等。FromDate必须等于或大于ToDate。但是比较两个DateTimePicker控件的未编辑默认值的结果是,它们不相等,我希望它们相等。请将您的解决方案作为答案发布。@Blam似乎认为它在这个问题上效果最好。但是读完这篇文章,好吧,我会把它贴出来!什么,“如果你要回答自己的问题,正确的格式是将答案作为答案发布。”@DanielHilgarth OK,所以字符串不是比较日期部分的好方法。但是Matt在>0上是正确的,这不是一个相等的比较。在我的应用程序中,我只是测试FromDate是否小于或等于ToDate,否则我会向用户投诉。(再次更新问题,使问题更加明确)。让我恼火的是,同一表单上两个datetimepicker控件的未编辑默认值不是相同的值。我原以为他们会的!