我有两个约会。一个由用户提供,精确到秒,一个来自数据库,精确到报价水平。这意味着当它们都代表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
代替。