首頁 >後端開發 >C++ >如何有效地從 .NET DateTime 物件中截斷毫秒?

如何有效地從 .NET DateTime 物件中截斷毫秒?

Patricia Arquette
Patricia Arquette原創
2025-01-18 22:19:08325瀏覽

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