我有两个约会。一个由用户提供,精确到秒,一个来自数据库,精确到报价水平。这意味着当它们都代表13/11/2009 17:22:17(英国日期)

userTime == dbTime


返回假

刻度值是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);


有没有更优雅的方法来实现这一目标?

最佳答案

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

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))
    ...


您可能会写:

if (userTime.Ticks / TimeSpan.TicksPerSecond
    == dbTime.Ticks / TimeSpan.TicksPerSecond)
   ...


我相信这是可行的,仅因为滴答0是在一秒钟的开始。

当然,您应该在所有时区方面都保持谨慎。您可能要考虑使用DateTimeOffset代替。

09-12 11:33