我试图将传入请求的时间戳与数据库存储值进行比较.当然,SQL Server在时间和读入数据时保持了毫秒的精度.NET日期时间,它包括这些毫秒.然而,对系统的传入请求不提供这种精度,所以我只需要删除毫秒.
我觉得我错过了一些显而易见的东西,但我还没有找到一种优雅的方式来做到这一点(C#).
我试图将传入请求的时间戳与数据库存储值进行比较.当然,SQL Server在时间和读入数据时保持了毫秒的精度.NET日期时间,它包括这些毫秒.然而,对系统的传入请求不提供这种精度,所以我只需要删除毫秒.
我觉得我错过了一些显而易见的东西,但我还没有找到一种优雅的方式来做到这一点(C#).
以下命令适用于具有小数毫秒的DateTime,并且还保留Kind属性(Local、UTC或UnDefined).
DateTime dateTime = ... anything ...
dateTime = new DateTime(
dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond),
dateTime.Kind
);
或同等或更短的名称:
dateTime = dateTime.AddTicks( - (dateTime.Ticks % TimeSpan.TicksPerSecond));
这可以概括为一种扩展方法:
public static DateTime Truncate(this DateTime dateTime, TimeSpan timeSpan)
{
if (timeSpan == TimeSpan.Zero) return dateTime; // Or could throw an ArgumentException
if (dateTime == DateTime.MinValue || dateTime == DateTime.MaxValue) return dateTime; // do not modify "guard" values
return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}
其用法如下:
dateTime = dateTime.Truncate(TimeSpan.FromMilliseconds(1)); // Truncate to whole ms
dateTime = dateTime.Truncate(TimeSpan.FromSeconds(1)); // Truncate to whole second
dateTime = dateTime.Truncate(TimeSpan.FromMinutes(1)); // Truncate to whole minute
...