C# DateTime转到小时/分钟/秒的第一个事件

C# DateTime转到小时/分钟/秒的第一个事件,c#,datetime,C#,Datetime,鉴于日期时间为2015年1月1日23:00: var someDate = new DateTime(2015, 1, 1, 23, 0, 0); 给定int6,这是所需的小时数,如何返回小时数为6的第一个日期时间?在这种情况下,someDate和6将返回2015年1月2日06:00时的新日期时间 我只需将小时数添加到原始日期,如果结果早于原始时间,则再添加一天: var someDate = new DateTime(2015, 1, 1, 23, 0, 0); var result = s

鉴于日期时间为2015年1月1日23:00:

var someDate = new DateTime(2015, 1, 1, 23, 0, 0);

给定int
6
,这是所需的小时数,如何返回小时数为
6
的第一个日期时间?在这种情况下,
someDate
6
将返回2015年1月2日06:00时的新日期时间

我只需将小时数添加到原始日期,如果结果早于原始时间,则再添加一天:

var someDate = new DateTime(2015, 1, 1, 23, 0, 0);
var result = someDate.Date.AddHours(6); // note the "Date" part
if (result < someDate) result = result.AddDays(1);
var someDate=新的日期时间(2015,1,1,23,0,0);
var result=someDate.Date.AddHours(6);//请注意“日期”部分
如果(result
我只需将小时数添加到原始日期,如果结果早于原始时间,则再添加一天:

var someDate = new DateTime(2015, 1, 1, 23, 0, 0);
var result = someDate.Date.AddHours(6); // note the "Date" part
if (result < someDate) result = result.AddDays(1);
var someDate=新的日期时间(2015,1,1,23,0,0);
var result=someDate.Date.AddHours(6);//请注意“日期”部分
如果(result
像这样的东西应该可以做到:

public DateTime FollowingHour(DateTime start, int hour)
{
    DateTime atHour = start.Date.AddHours(6);

    if(atHour < start)
    {
        atHour += TimeSpan.FromDays(1);
    }

    return atHour;
}
public DateTime follower hour(DateTime start,int hour)
{
DateTime atHour=start.Date.AddHours(6);
如果(在小时<开始)
{
atHour+=从天开始的时间跨度(1);
}
返回阿瑟尔;
}

像这样的东西应该可以做到:

public DateTime FollowingHour(DateTime start, int hour)
{
    DateTime atHour = start.Date.AddHours(6);

    if(atHour < start)
    {
        atHour += TimeSpan.FromDays(1);
    }

    return atHour;
}
public DateTime follower hour(DateTime start,int hour)
{
DateTime atHour=start.Date.AddHours(6);
如果(在小时<开始)
{
atHour+=从天开始的时间跨度(1);
}
返回阿瑟尔;
}

您只需在日期上加上一天,在结果上加上六个小时:

var someDate = new DateTime(2015, 1, 1, 23, 0, 0);
var result = someDate.Date.AddDays(1).AddHours(6);

请注意
Date
属性的使用-它将为您提供一天的开始日期,从那里可以轻松地向前导航。

您只需在日期上添加一天,在结果上添加六个小时:

var someDate = new DateTime(2015, 1, 1, 23, 0, 0);
var result = someDate.Date.AddDays(1).AddHours(6);
请注意
Date
属性的使用-它将为您提供当天的开始日期,从那里可以轻松地向前导航。

尝试以下操作:

while(someDate.Hour != 6){
    someDate = someDate.AddHours(1);
}
试试这个:

while(someDate.Hour != 6){
    someDate = someDate.AddHours(1);
}

假设您指的是24小时制,您可以尝试以下方法:

    public DateTime GetDate(DateTime someDate,int hour)
    {
       return someDate.Hour>=hour? someDate.Date.AddDays(1).AddHours(6):someDate.Date.AddHours(6);
    }

假设您指的是24小时制,您可以尝试以下方法:

    public DateTime GetDate(DateTime someDate,int hour)
    {
       return someDate.Hour>=hour? someDate.Date.AddDays(1).AddHours(6):someDate.Date.AddHours(6);
    }

你可以做一个循环,不断增加一个小时,直到6小时。或者检查小时数是否小于6并加上差值,或者当大于6+时加上6+(24-当前小时)。你可以做一个循环,不断加一小时,直到小时数为6。或者检查小时数是否小于6并加上差值,或者大于6+(24-当前小时)。
result
将始终为false,因为您刚刚将小时数添加到
someDate
,因此
result
必须更大。@juharr请仔细阅读:我将6小时添加到someDate。约会!好的,我知道你在做什么。虽然还不清楚OP是否希望丢失当前的分和秒。@juharr“小时数为6的下一个日期时间”当然是6:00:00,因为6:00:01不是第一个。谢谢,这很有效。西方最快的枪赢得了答案
result
将始终为false,因为您刚刚在
someDate
中添加了小时,所以
result
必须更大。@juharr请仔细阅读:我在someDate中添加了6小时。约会!好的,我知道你在做什么。虽然还不清楚OP是否希望丢失当前的分和秒。@juharr“小时数为6的下一个日期时间”当然是6:00:00,因为6:00:01不是第一个。谢谢,这很有效。西方最快的枪赢得了答案!这不适用于新日期时间(2015,1,1,0,0)
其中答案应该是2015年1月1日06:00
这不适用于新日期时间(2015,1,1,1,0,0)其中答案应该是2015年1月1日06:00这同样有效,但如果您从07:00开始添加,这几乎没有公认的答案那么有效。还是我错了?最多需要23次迭代,我想不会太多,但是的,被接受的答案是完美的。这也是可行的,但如果你从07:00开始添加,它的效率远不如被接受的答案。还是我错了?最多23次迭代,我想不会太多,但是的,被接受的答案是完美的。