c# - 如何截断 .NET DateTime 的毫秒数

标签 c# .net datetime

我正在尝试将来自传入请求的时间戳与数据库存储值进行比较。 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/

相关文章:

c# - 汇编语言解析器实现

c# - 两个WinForm之间的TreeView的Invoke方法应该在哪里处理?

sql-server - 如何计算 SQL Server 中两个日期之间的小时数(十进制)差异?

java - 为什么 DateTimeFormatter 没有格式化我的字符串?

java - 如何解析此日期格式?

c# - Unity C# 应用程序 KeyNotFoundException

c# - 是否可以通过 URI 引用存储在独立存储中的文件?

C# UserControl 可见属性

c# - 如何将 javascript 中的 JSON 数组传递到我的代码隐藏文件

c# - 在 .Net 中为整个句子实现 soundex