處理 .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中文網其他相關文章!