C#DateTime比较准确性和舍入

Mag*_*pie 3 c# datetime

我有两个约会.一个由用户提供并准确到第二个和一个从数据库并准确到刻度级别.这意味着当他们都代表13/11/2009 17:22:17(英国约会)

userTime == dbTime 
Run Code Online (Sandbox Code Playgroud)

返回false

刻度值为633937297368344183和633937297370000000.

为了解决这个问题,我使用了代码

userTime = new DateTime(
                userTime.Year, 
                userTime.Month, 
                userTime.Day, 
                userTime.Hour, 
                userTime.Minute, 
                userTime.Second);

dbTime = new DateTime(
                dbTime.Year, 
                dbTime.Month, 
                dbTime.Day, 
                dbTime.Hour, 
                dbTime.Minute, 
                dbTime.Second);
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来实现这一目标?

Jon*_*eet 8

最明显的重构是删除重复:

public static DateTime TruncateToSecond(DateTime original)
{
    return new DateTime(original.Year, original.Month, original.Day,
        original.Hour, original.Minute, original.Second);
}

...
if (TruncateToSecond(userTime) == TruncateToSecond(dbTime))
    ...
Run Code Online (Sandbox Code Playgroud)

你很可能写:

if (userTime.Ticks / TimeSpan.TicksPerSecond
    == dbTime.Ticks / TimeSpan.TicksPerSecond)
   ...
Run Code Online (Sandbox Code Playgroud)

相信这会奏效,因为刻度0是在一秒的开始.

当然,你应该小心所有这些的时区方面.您可能需要考虑使用DateTimeOffset.


Adr*_*der 5

你能试一下吗

UserDateTime.Substract(dbDateTime).TotalSeconds == 0
Run Code Online (Sandbox Code Playgroud)