C# 在C中,获取从小于23:00:00到大于24:00:00之间最接近24:00:00的时间#

C# 在C中,获取从小于23:00:00到大于24:00:00之间最接近24:00:00的时间#,c#,datetime,if-statement,C#,Datetime,If Statement,我试图让时间在两个值之间接近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++) {

我试图让时间在两个值之间接近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 dt1=新日期时间(2014,11,11,23,50,00);
var dt2=新日期时间(2014年12月11日00日50日00);
var l=新列表();
对于(int i=0;i

谢谢您的帮助和建议。

您的问题非常令人困惑,也不完全清楚您想要实现什么目标,但我做了一些假设,并提出了我的想法,也许您想要的是:

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]);

}
var l=新列表{
新日期时间(2014、11、11、22、0、0),
新日期时间(2014、11、11、23、45、0),
新日期时间(2014、11、11、23、55、0),
新日期时间(2014、11、11、23、59、59),
新日期时间(2014、11、12、0、0、0),
新日期时间(2014、11、12、0、4、0),
新日期时间(2014、11、12、0、15、0),
新日期时间(2014、11、12、1、0、0),
新日期时间(2014、11、12、10、0、0),
};
对于(int i=0;i=23*60+55)
WriteLine(“{0}接近午夜”,l[i]);
其他的
WriteLine(“{0}不接近午夜”,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 l=新列表{
新日期时间(2014,11,11,15,0,0),//15:00:00
新日期时间(2014,11,11,16,0,0),//16:00:00
新日期时间(2014,11,11,17,0,0),//17:00:00
新日期时间(2014,11,11,17,20,0),//17:20:00
新日期时间(2014,11,11,18,15,0),//18:15:00
新日期时间(2014,11,11,19,0,0),//19:00:00
新日期时间(2014,11,11,22,0,0),//22:00:00
新日期时间(2014,11,11,23,45,0),//23:45:00
新日期时间(2014,11,11,23,50,00),//23:50:00
新日期时间(2014,12,11,00,50,00),//00:50:00
新日期时间(2014,11,12,1,0,0),//01:00:00
新日期时间(2014,11,12,10,0,0),//10:00:00
};
变量时间=新的时间跨度(18,0,0);//
next.addmillizes(offsetBefore).TimeOfDay.totalmillizes>current.addmillizes(offsetBefore.TimeOfDay.totalmillizes
? 下一个
:电流);
var闭合器=
l、 聚合(
(当前,下一个)=>
next.addmillizes(offsetAfter).TimeOfDay.totalmillizes
这会将列表中最近的日期/时间返回到午夜之前的午夜,也会将列表中最近的日期/时间返回到午夜之后的午夜

希望这有帮助

试试这个:

        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";
var dt1=新日期时间(2014,11,11,23,50,00);
var dt2=新日期时间(2014年12月11日00日50日00);
var dt1temp=新的日期时间(dt1.Year,dt1.Month,dt1.Day,00,00);
var dt2temp=新的日期时间(dt2.Year,dt2.Month,dt2.Day,00,00);
TimeSpan time1=新的TimeSpan();
TimeSpan time2=新的TimeSpan();
TimeSpan time24=新的TimeSpan(24,0,0);
time1=dt1-dt1temp;
time2=dt2-dt2temp;
如果(time1.Hours>=12)time1=time24-time1;
如果(time2.Hours>=12)time2=time24-time2;
字符串结果=”;
如果(time1
您的意思是想知道ts1和ts2中的哪一个更接近24小时?将显示一个示例输出和预期输出helpful@Codeek我没有输出。@juharr这是正确的。您是在使用绝对时间还是跨度?谢谢您的回答和代码。然而,在我的例子中,我应该有两个值,一个在午夜之前,另一个在午夜之后。此外,如果您可以使用TimeSpan,您的解决方案将更接近我的真实代码。我发布的只是一个例子。谢谢。@doro:它确实使用TimeSpan。。。DateTime.TimeOfDay返回TimeSpan对象。虽然我真的不知道你想用这两个值在这里做什么,但请让你的问题更清楚,以便人们有更好的机会帮助你。我需要这两个值来执行插值。你需要用你在评论中留下的所有信息编辑你的答案。人们更容易对你的问题感兴趣,并尽可能给你最好的答案。当关于你的问题的大部分知识都分布在不同的评论中时,这是很困难的。人们不止一次问你,所以请编辑你的答案。@FilipeCarvalho:不知道你的意思。。。我一直在编辑我的答案,因为我对原始问题有了更多的了解……这似乎是我想要的。谢谢你,卡茨!:-)