[英]DateTime.Compare doesn't work as expected
我正在嘗試使用下面的函數比較兩個忽略秒的DateTime對象,但是即使兩個DateTime對象的值相同,它也會給出錯誤的結果。 無法弄清楚如何使其正常工作,任何幫助將不勝感激。
public static int CompareDateTime(DateTime d1, DateTime d2)
{
d1 = d1.AddSeconds(-1 * d1.Second);
d2 = d2.AddSeconds(-1 * d2.Second);
int result = DateTime.Compare(d1, d2);
string relationship;
if (result < 0)
relationship = "is earlier than";
else if (result == 0)
relationship = "is the same time as";
else
relationship = "is later than";
Console.WriteLine("{0} {1} {2}", d1, relationship, d2);
return result;
}
結果:
3/7/2017 2:54:00 PM is later than 3/7/2017 2:54:00 PM
這里的問題是您沒有像預期的那樣被截斷。 截斷的最佳方法是通過執行以下操作從構造函數創建一個全新的DateTime對象:
d1 = new DateTime(d1.Year, d1.Month, d1.Day, d1.Hour, d1.Minute, 0);
d2 = new DateTime(d2.Year, d2.Month, d2.Day, d2.Hour, d2.Minute, 0);
這將確保您只比較所需的數據。
在這種特定情況下,嘗試截斷所剩下的可能是日期時間中的毫秒數。
您只需要忽略毫秒。 您可以將其添加到代碼中,也可以使用@Chris建議的更“優雅”的解決方案
d1 = d1.AddMilliseconds(-1 * d1.Millisecond);
d2 = d2.AddMilliseconds(-1 * d2.Millisecond);
每個人都在提供一種縮短時間的解決方案...所以我給我一個平時使用的解決方案... DateTime
是從0001年1月1日的0:00:00開始的滴答數...如果您知道一分鍾內有多少滴答聲(有一個只讀字段: TimeSpan.TicksPerMinute
),您可以計算從0001年1月1日起的分鍾數...
long minutes1 = d1.Ticks / TimeSpan.TicksPerMinute;
long minutes2 = d2.Ticks / TimeSpan.TicksPerMinute;
int result = minutes1.CompareTo(minutes2);
(請注意, TimeSpan
中有各種“有用的”值: TicksPerDay
, TicksPerHour
, TicksPerMinute
, TicksPerSecond
, TicksPerMillisecond
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.