簡體   English   中英

在C#中,從更少23:00:00到更大24:00:00之間獲取最接近24:00:00的時間

[英]Get the closest time to 24:00:00 between less 23:00:00 to greater 24:00:00 in C#

我正試圖使兩個值之間的時間更接近24:00:00,在午夜之前和午夜之后。

編輯:這只是我正在嘗試做的一個例子。 在這種情況下,我應該同時獲得兩個項目。

var dt1 = new DateTime(2014, 11, 11, 23, 50, 00);
var dt2 = new DateTime(2014, 12, 11, 00, 50, 00);
var l = new List<DateTime>();

for (int i = 0; i < l.Count - 1; i++)
{
    TimeSpan ts1 = new TimeSpan(l[i].Hour, l[i].Minute, l[i].Second);
    TimeSpan ts2 = new TimeSpan(l[i + 1].Hour, l[i + 1].Minute, l[i + 1].Second);

    if (ts1.TotalHours <= 23 && ts2.TotalHours >= 00)
    {
        Console.WriteLine("00:00:00 - {0} {1} \n", ts1, ts2);
    }
}

感謝您的幫助和建議。

您的問題令人困惑,無法完全弄清您要實現的目標,但是我已經做出了一些假設,並提出了我認為可能的目標:

var l = new List<DateTime> {
    new DateTime(2014, 11, 11, 22, 0, 0),
    new DateTime(2014, 11, 11, 23, 45, 0),
    new DateTime(2014, 11, 11, 23, 55, 0),
    new DateTime(2014, 11, 11, 23, 59, 59),
    new DateTime(2014, 11, 12, 0, 0, 0),
    new DateTime(2014, 11, 12, 0, 4, 0),
    new DateTime(2014, 11, 12, 0, 15, 0),
    new DateTime(2014, 11, 12, 1, 0, 0),
    new DateTime(2014, 11, 12, 10, 0, 0),
};

for (int i = 0; i < l.Count - 1; i++) {

    if (l[i].TimeOfDay.TotalMinutes < 5 || l[i].TimeOfDay.TotalMinutes >= 23*60 + 55) 
        Console.WriteLine("{0} is close to midnight", l[i]);
    else
        Console.WriteLine("{0} is NOT close to midnight", l[i]);

}

我已經在日期/時間列表中加載了一些測試數據,並且代碼簡單地打印出每個日期/時間是否在午夜左右的5分鍾內。

回答您的歧義問題的另一種嘗試如下:

var l = new List<DateTime> {
    new DateTime(2014, 11, 11, 15, 0, 0),   // 15:00:00
    new DateTime(2014, 11, 11, 16, 0, 0),   // 16:00:00
    new DateTime(2014, 11, 11, 17, 0, 0),   // 17:00:00
    new DateTime(2014, 11, 11, 17, 20, 0),  // 17:20:00
    new DateTime(2014, 11, 11, 18, 15, 0),  // 18:15:00
    new DateTime(2014, 11, 11, 19, 0, 0),   // 19:00:00
    new DateTime(2014, 11, 11, 22, 0, 0),   // 22:00:00
    new DateTime(2014, 11, 11, 23, 45, 0),  // 23:45:00
    new DateTime(2014, 11, 11, 23, 50, 00), // 23:50:00
    new DateTime(2014, 12, 11, 00, 50, 00), // 00:50:00
    new DateTime(2014, 11, 12, 1, 0, 0),    // 01:00:00
    new DateTime(2014, 11, 12, 10, 0, 0),   // 10:00:00
};

var time = new TimeSpan(18, 0, 0); // <- Set the target time here
var offsetBefore = new TimeSpan(1, 0, 0, 0).TotalMilliseconds - time.TotalMilliseconds;
var offsetAfter = time.TotalMilliseconds * -1;

var closestBefore =
    l.Aggregate(
        (current, next) =>
            next.AddMilliseconds(offsetBefore).TimeOfDay.TotalMilliseconds > current.AddMilliseconds(offsetBefore).TimeOfDay.TotalMilliseconds
                ? next
                : current);

var closestAfter =
    l.Aggregate(
        (current, next) =>
            next.AddMilliseconds(offsetAfter).TimeOfDay.TotalMilliseconds < current.AddMilliseconds(offsetAfter).TimeOfDay.TotalMilliseconds
                ? next
                : current);

Console.WriteLine("{0} is the closest date/time before {1}.", closestBefore, time);
Console.WriteLine("{0} is the closest date/time after {1}.", closestAfter, time);
Console.WriteLine("00:00:00 - {0} {1} \n", closestBefore, closestAfter);

// OUTPUTS:
//   11/11/2014 17:20:00 is the closest date/time before 18:00:00.
//   11/11/2014 18:15:00 is the closest date/time after 18:00:00.
//   00:00:00 - 11/11/2014 17:20:00 11/11/2014 18:15:00    

這會將列表中最接近午夜之前的午夜的日期/時間,以及列表中最接近午夜之后的午夜的日期/時間。

希望這可以幫助!

嘗試這個:

        var dt1 = new DateTime(2014, 11, 11, 23, 50, 00);
        var dt2 = new DateTime(2014, 12, 11, 00, 50, 00);

        var dt1temp = new DateTime(dt1.Year, dt1.Month, dt1.Day, 00, 00, 00);
        var dt2temp = new DateTime(dt2.Year, dt2.Month, dt2.Day, 00, 00, 00);

        TimeSpan time1 = new TimeSpan();
        TimeSpan time2 = new TimeSpan();
        TimeSpan time24 = new TimeSpan(24, 0, 0);

        time1 = dt1 - dt1temp;
        time2 = dt2 - dt2temp;

        if (time1.Hours >= 12) time1 = time24 - time1;
        if (time2.Hours >= 12) time2 = time24 - time2;

        string result = "";

        if (time1 < time2) result = "Time1 nearer to 00:00";
        else result = "Time2 nearer to 00:00";

暫無
暫無

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

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