我有两个约会.一个由用户提供并准确到第二个和一个从数据库并准确到刻度级别.这意味着当他们都代表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)
是否有更优雅的方式来实现这一目标?
最明显的重构是删除重复:
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.
你能试一下吗
UserDateTime.Substract(dbDateTime).TotalSeconds == 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |