将DateTime与存储在数据库中的日期进行比较

时间:2011-03-14 15:26:09

标签: c# .net sql-server datetime

我有两个约会时间。 我从SQL服务器获得一个日期时间,另一个日期是客户端的日期时间。

两个日期时间相等但在我的代码中返回不相等。 为什么呢?

var mngProduct = new ProductManager();
var file = mngProduct.GetProductImageData(int.Parse(context.Request["imageId"]), imageSize);

if (!String.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"]))
{
  System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
  var lastMod = DateTime.ParseExact(context.Request.Headers["If-Modified-Since"], "r", provider).ToLocalTime();
  if (lastMod==file.CreatedOn)//return false always
  {
    res.StatusCode = 304;
    res.StatusDescription = "Not Modified";
    return;
  }
}
res.ContentType = file.MimeType;
res.AddHeader("Content-disposition", "attachment; filename=" + file.FileName);
res.AddHeader("Content-Length", file.Content.Length.ToString());
res.BinaryWrite(file.Content.ToArray());
res.Cache.SetCacheability(HttpCacheability.Public);
res.Cache.SetLastModified(file.CreatedOn);

4 个答案:

答案 0 :(得分:4)

SQL DateTime在毫秒级时的精度较低。我会检查两个日期的差异是否小于TimeSpan

if(Math.Abs(date1.Subtract(date2).TotalSeconds)>1) // difference of more than 1 second
{
     ...
}

答案 1 :(得分:1)

假设时间实际相等,您需要使用lastMod.Equals(file.CreatedOn)

答案 2 :(得分:1)

我想他们并不完全一样。日期组件可能相等,但可能时间组件不是,或者时间组件可能会以毫秒为单位,这会导致操作员返回false。

您是否检查过调试器中的实际值以确保它们确实完全相同?

如果您只想比较实际日期,可能需要考虑以下内容:

if(lastMod.Year != file.Year || lastMod.Month!= file.Month || lastMod.Month != file.Month)
{
   ....
}

您可以使用DateTime结构的其他类似属性来比较您实际感兴趣的部分。

答案 3 :(得分:1)

你确定2个日期时间是一样的吗?两者必须具有相同的毫秒(刻度)。

我建议你在这个2之间得到TimeSpan,并测试跨度是否小于一秒,一分钟或任何你认为好的。

如果您只需要比较日期时间的日期部分。比较日期时间的Date属性。