我有兩個日期,我只想確保它們在這 6 個欄位上匹配:年、月、日、小時、分鐘和秒。
我注意到,如果我在這些欄位上執行一個簡單的相等 == 比較 if(d1 == d2),我仍然會得到“假”。我假設這與引擎蓋下與滴答聲、毫秒等相關的其他欄位有關。我怎樣才能忽略所有內容并確保它們與上面的 6 個欄位匹配?
我在下面創建了原型函式,但對我來說,這對于生產級代碼來說感覺很業余且效率低下。此外, date1 必須是可為空的日期時間。
還有其他人有更好的建議嗎?
private static bool DatesAreEqual(DateTime date1, DateTime date2)
{
var d1 = new DateTime(date1.Year, date1.Month, date1.Day,
date1.Hour, date1.Minute, date1.Second);
var d2 = new DateTime(date2.Year, date2.Month, date2.Day,
date2.Hour, date2.Minute, date2.Second);
return d1 == d2;
}
uj5u.com熱心網友回復:
您可以洗掉日期的小數部分(請注意,小數部分比毫秒長):
DateTime date = DateTime.Now;
// 28 02 2022 22:19:56.3704625
Console.WriteLine($"date:dd MM yyyy HH:mm:ss.fffffff");
date -= TimeSpan.FromTicks(date.Ticks % 10_000_000);
// 28 02 2022 22:19:56.0000000
Console.WriteLine($"date:dd MM yyyy HH:mm:ss.fffffff");
代碼:
DateTime date1 = ...
DateTime date2 = ...
...
if (date1 - TimeSpan.FromTicks(date1.Ticks % 10_000_000) ==
date2 - TimeSpan.FromTicks(date2.Ticks % 10_000_000)) {
//TODO: Relevant code here
}
您可以實作擴展類以使主代碼更短且更具可讀性:
public partial static class DateTimeExtensions {
public static DateTime TrimToSeconds(this DateTime value) =>
value - TimeSpan.FromTicks(value.Ticks % 10_000_000)
}
然后
DateTime date1 = ...
DateTime date2 = ...
...
if (date1.TrimToSeconds() == date2.TrimToSeconds()) {
//TODO: Relevant code here
}
uj5u.com熱心網友回復:
當new指定日期時,將所有屬性明確傳遞到您想要的解析度。其他屬性默認為零。直接比較date1 == date2比較所有屬性,如Ticks(向 Jon Skeet 致敬),但歸零毫秒,例如,實際上不進行比較。
為了應用程式的一致性,讓 getter 和 setter 將“未使用”的精度屬性歸零。不需要也不依賴客戶端代碼來呼叫 Date 屬性的折磨組合來獲得它應該首先出現的形式。
uj5u.com熱心網友回復:
這可能會稍微快一些:
var sameDateTime = ((date1 - date2).Milliseconds < 1000);
https://stackoverflow.com/a/58173628/759558
uj5u.com熱心網友回復:
正如 sr28 剛剛指出的那樣,您可以添加 ? 使 DateTime 可以為空(這始于 C# 6)。
為了簡化您的方法,請嘗試將日期轉換為帶有格式的字串,然后進行比較。這有效:
private static bool DatesAreEqual(DateTime? date1, DateTime? date2)
{
string? d1 = date1?.ToString("MM/dd/yyyy HH:mm:ss");
string? d2 = date2?.ToString("MM/dd/yyyy HH:mm:ss");
return d1 == d2;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/434497.html
上一篇:面試連環炮系列(二十?五):RocketMQ怎么保證訊息不丟失
下一篇:JSON反序列化物件回傳null
