与MaxValue的日期比较不起作用

use*_*369 4 c# datetime

我有一个可以为null的Date属性BoughtDate.我正在尝试以下方法:

if( item.BoughtDate.Value.Equals( DateTime.MaxValue) ) item.BoughtDate= null;
Run Code Online (Sandbox Code Playgroud)

还试过这个:

if( item.BoughtDate.Equals( DateTime.MaxValue) ) item.BoughtDate=null;
Run Code Online (Sandbox Code Playgroud)

调试时,我BoughtDateDateTime.MaxValue似乎一模一样-但它说,这是不一样的(不设置我item.BoughtDate为null)

为什么我的比较不起作用?

Pik*_*koh 7

正如@PaulSuart在评论中指出的那样,问题可能是毫秒精度.DateTime.MaxValue.TimeOfDay{23:59:59.9999999},但你BoughtDate.TimeOfDay可能是{23:59:59.9990000},所以他们不平等.

我要做的只是比较日期,我认为在大多数情况下这已足够:

if( item.BoughtDate.Value.Date.Equals( DateTime.MaxValue.Date) ) item.BoughtDate= null;
Run Code Online (Sandbox Code Playgroud)


pho*_*nix 0

编辑:正如有人指出的,它并没有回答原来的问题,只是提供了一个替代方案。

尝试使用 DateTime.Compare

https://msdn.microsoft.com/pl-pl/library/system.datetime.compare(v=vs.110).aspx

public static void Main()
{
  DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
  DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
  int result = DateTime.Compare(date1, date2);
  string relationship;

  if (result < 0)
     relationship = "is earlier than";
  else if (result == 0)
     relationship = "is the same time as";         
  else
     relationship = "is later than";

  Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
}
Run Code Online (Sandbox Code Playgroud)

在你的例子中可能是这样的:

if(DateTime.Compare(item.BoughtDate.Value,DateTime.MaxValue) == 0) item.BoughtDate=null;
Run Code Online (Sandbox Code Playgroud)