我有一个关于如何在 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);
The Assert.IsNotNull
由于日期时间检查而失败。我希望当 LanguageDictionary 实例是使用变量的值创建时,两者将相等。这是使用 Telerik.OpenAccess 和 MSSQL 作为数据库层,所以我假设问题就在那里。谁能告诉我是否有什么遗漏以及如何正确比较这些值。
编辑:刻度值不同,但我不知道为什么,因为它们都来自同一个变量,我只分配给一次。
尝试使用DateTime.Equals(x.CreatedDate, createdDate)
,这可能会有所帮助。
除此之外,适当DateTime
比较是一个非常复杂的主题,涉及时区、偏移量、UTC、当地时间等等。我一点也不会对一个简单的事情感到惊讶==
比较两个看似相同的日期以返回 false。
If the Ticks
写入和读取时的值不同,您可能会面临DateTimeKind
问题,你在哪里写DateTimeKind.Local
到数据库,但返回一个DateTimeKind.Unspecified
.
另一种选择可能是(如果差异足够小)DateTime
数据库中的字段不够重要,无法存储与 .net 相同数量的毫秒数DateTime
:
一个刻度代表一百纳秒或百万分之一秒。一毫秒有 10,000 个刻度。
根据您的数据存储,它可能不会像这样详细。你的DateTime
值的来源不同,一个是从内存中读取,另一个是从数据库中读取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)