首页 >后端开发 >C++ >如何有效地从 .NET DateTime 对象中截断毫秒?

如何有效地从 .NET DateTime 对象中截断毫秒?

Patricia Arquette
Patricia Arquette原创
2025-01-18 22:19:08372浏览

How to Efficiently Truncate Milliseconds from a .NET DateTime Object?

处理 .NET DateTime 对象中的毫秒差异

将外部请求收到的时间戳与数据库值(例如 SQL Server)进行比较时,精度差异可能会导致比较问题。 这通常源于数据库的毫秒精度,传入的数据中可能不存在该精度。 要纠正此问题,需要从 .NET DateTime 对象中删除毫秒。

一个简洁的解决方案涉及直接操作 Ticks 属性:

<code class="language-csharp">DateTime dateTime = ...; // Your DateTime object
dateTime = new DateTime(dateTime.Ticks - (dateTime.Ticks % TimeSpan.TicksPerSecond), dateTime.Kind);</code>

或者,可读性稍强的版本也能达到相同的结果:

<code class="language-csharp">dateTime = dateTime.AddTicks(-(dateTime.Ticks % TimeSpan.TicksPerSecond));</code>

这两种方法都可以有效地截断毫秒,同时保留 Kind 属性(Local、Utc 或 Unspecified)。

为了增强可重用性,请考虑创建扩展方法:

<code class="language-csharp">public static DateTime TruncateMilliseconds(this DateTime dateTime, TimeSpan timeSpan)
{
    if (timeSpan == TimeSpan.Zero) return dateTime; // Handle zero TimeSpan

    if (dateTime == DateTime.MinValue || dateTime == DateTime.MaxValue) return dateTime; // Preserve special values

    return dateTime.AddTicks(-(dateTime.Ticks % timeSpan.Ticks));
}</code>

此扩展方法允许灵活截断:

<code class="language-csharp">dateTime = dateTime.TruncateMilliseconds(TimeSpan.FromMilliseconds(1)); // Truncate to whole milliseconds
dateTime = dateTime.TruncateMilliseconds(TimeSpan.FromSeconds(1));     // Truncate to whole seconds
dateTime = dateTime.TruncateMilliseconds(TimeSpan.FromMinutes(1));    // Truncate to whole minutes
// ... and so on</code>

这些方法提供了直接的方法来消除比较 DateTime 对象时的毫秒差异,确保准确的时间戳比较。

以上是如何有效地从 .NET DateTime 对象中截断毫秒?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn