我正在尝试将来自传入请求的时间戳与数据库存储值进行比较。 SQL Server 当然会在时间上保持一定的毫秒精度,当读入 .NET DateTime 时,它会包含这些毫秒数。然而,系统的传入请求并没有提供那样的精度,因此我需要简单地降低毫秒数。
我觉得我遗漏了一些明显的东西,但我还没有找到一种优雅的方法 (C#)。
最佳答案
以下内容适用于具有小数毫秒的 DateTime,并且还保留 Kind 属性(本地、Utc 或未定义)。
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
...
关于c# - 如何截断 .NET DateTime 的毫秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1004698/