如何从.NET DateTime截断毫秒数

我正在尝试将传入请求中的时间戳与数据库存储值进行比较。SQL Server当然会在时间上保持毫秒级的精度,当读入.NET

DateTime时,它会包含这些毫秒级。但是,对系统的传入请求没有提供这种精度,因此我只需要减少毫秒数即可。

我觉得我缺少明显的东西,但是我还没有找到一种优雅的方法(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

...

以上是 如何从.NET DateTime截断毫秒数 的全部内容, 来源链接: utcz.com/qa/403286.html

回到顶部