比较相等的日期时间而不是比较

Ash*_*Ash 11 c# datetime telerik-open-access

我查询了如何在C#中比较/存储日期时间.请考虑以下代码:

var createdDate = DateTime.Now;
using (cr = new LanguageDictionaryRepository(ds)) {
    cr.Add(new Sybrin10.Data.DTO.LanguageDictionary() {
        Active = true,
        CreatedDate = createdDate,
        CultureCode = cultureCode,
        Data = new System.Text.UTF8Encoding().GetBytes("Test")
    });
    cr.Save();

    var y = cr.FindBy(x => x.CultureCode == cultureCode && x.CreatedDate == createdDate).FirstOrDefault();
    Assert.IsNotNull(y);
Run Code Online (Sandbox Code Playgroud)

由于日期时间检查,Assert.IsNotNull失败.我希望,因为LanguageDictionary实例是使用变量的值创建的,两者将是相等的.这是使用Telerik.OpenAccess和MSSQL作为数据库层,所以我假设问题出现在那里.任何人都可以告诉我,如果有什么我缺少这个以及如何正确比较这些值.

编辑:刻度值不同但我不知道为什么因为它们都来自我只分配给一次的同一个变量.

Wil*_*lem 20

尝试使用DateTime.Equals(x.CreatedDate, createdDate),它可能会有所帮助.

除此之外,适当的DateTime比较是一个大规模复杂的主题与时区,偏移,utc,当地时间和诸如此类的东西.我完全不会==对两个看似相同的日期之间的简单比较感到惊讶.

如果Ticks写入和读取的值不同,那么您可能会面临一个DateTimeKind问题,即您正在写一个DateTimeKind.Local数据库,但是要回到数据库DateTimeKind.Unspecified.

另一个选项可能是(如果差异足够小),DateTime数据库中的字段不足以存储与.net相同的毫秒数DateTime:

单个刻度表示一百纳秒或一千万分之一秒.一毫秒内有10,000个刻度.

根据您的数据存储,它可能不如此详细.您的DateTime值不是来自同一个源,一个从内存中读取,另一个从数据库中读取.

  • 实际上我会创建一个DateTime类的扩展,以便在没有刻度的情况下进行比较,因为我看到这种情况再次出现.谢谢你的回答,它给了我很多清晰度. (2认同)