处理 .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中文网其他相关文章!