C# 如何将时间循环到下一个半小时?

C# 如何将时间循环到下一个半小时?,c#,datetime,C#,Datetime,我有一列包含HH:mm:ss PM/AM格式的时间。我想把同一时间缩短到下一个半小时。例如,如果时间为上午10:05:00,则舍入时间为上午11:30:00;如果时间为上午10:55:00,则舍入时间为上午11:30:00,约为下一个半小时。这对您来说应该适用 DateTime src = ...; var target = new DateTime(src.Year, src.Month, src.Day, src.Hour, 0, 0) .AddHours(1

我有一列包含HH:mm:ss PM/AM格式的时间。我想把同一时间缩短到下一个半小时。例如,如果时间为上午10:05:00,则舍入时间为上午11:30:00;如果时间为上午10:55:00,则舍入时间为上午11:30:00,约为下一个半小时。

这对您来说应该适用

DateTime src = ...;
var target = new DateTime(src.Year, src.Month, src.Day, src.Hour, 0, 0)
                .AddHours(1.5);
var dateTime = DateTime.Now; //your original DateTime value
var result = new DateTime(dateTime.Year, dateTime.Month, dateTime.Day,
                          dateTime.Hour + 1, 30, dateTime.Second, dateTime.Kind);
小时到下一小时+1 30分

string yourstring = "10:05:00 am";
DateTime date1 = DateTime.Parse(yourstring);
if (date1.Minute > 0)
    date1 = date1.AddMinutes(-date1.Minute);
if (date1.Second > 0)
    date1 = date1.AddSeconds(-date1.Second);
date1 = date1.AddMinutes(90);
Console.WriteLine(date1);
我有一列包含HH:mm:ss PM/Am格式的时间

如果我从这句话中理解正确,我会假设您有一个DateTime,并且您得到了hh:mm:ss tt格式的列的字符串表示

如果是这样,您可以首先将其解析为DateTime,检查其分钟数是否为0,如果是,则添加30分钟,如果不是,则将其分钟数部分设置为0,并添加1.5小时


但当然,由于您已经有一个Datetime实例,请先执行所有AddMinutes和/或AddHours过程,然后在您的列中显示它的文本表示

上午10:05:00,那么鲁诺夫时间是11:30:00,如果是上午10:55:00,那么是上午11:30:00???它背后的逻辑是什么?@Arvaan-就像四舍五入到下一个半小时,但它就像是一个小时中间,意思是如果4:00:00那么4:30:00,或者如果4:15:00那么下一个半小时是4:45:00,然后我想要5:30:00@dwan那么你的逻辑是如何运作的呢?下午4点>下午4点30分,然后10点>11点30分。正在添加随机分钟。。。有些是90分钟,有些是30分钟..Gonul-谢谢你的回答,但它不会在dt中增加分钟。@dwan你是说10:00:00这样的值吗?对于这个值,结果应该是什么?我的意思是,我想要时间加上分钟,意思是10:30:00@dwan这正是我的代码所做的。请尝试一下,看看结果。为什么要处理这些字符串?DateTime应始终作为DateTime处理,但非常特殊的情况除外,这不是其中之一。如果添加+1小时,并且当前时间为晚上11点,则此操作无效。运行时将花费23:00并向其中添加1,以获得24:00,这是一个不可表示的日期时间,它将引发异常。最好使用@Mark Shevchenko的方法,并在实例化“结果”后添加1.5小时。
string s = "10:00:00 am";
DateTime dt;
if(DateTime.TryParseExact(s, "hh:mm:ss tt", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    if(dt.Minute != 0)
       dt.AddMinutes(-dt.Minute).AddHours(1.5).ToString("hh:mm:ss tt", 
                                                        CultureInfo.InvariantCulture);
    else
       dt.AddMinutes(30).ToString("hh:mm:ss tt", CultureInfo.InvariantCulture);
}