簡體   English   中英

DateTime.Compare不能按預期工作

[英]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中有各種“有用的”值: TicksPerDayTicksPerHourTicksPerMinuteTicksPerSecondTicksPerMillisecond

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM