如何计算“下一个”半小时或小时的剩余分钟数?

时间:2012-02-21 09:06:35

标签: c# .net datetime

我想计算“下一个”半小时或小时的剩余分钟数。

假设我得到一个07:15的开始时间字符串,我希望它计算剩下的分钟数到最近的半小时(07:30)

That would be 15min.

然后我还可以有一个开始时间为07:45的实例,我希望它计算到最近的小时(08:00)的剩余分钟数。

That would also be 15min.

因此,每小时30分钟以内的任何字符串计算到最近的半小时(..:30),超过30分钟的任何字符串将计算到最接近的小时(..:00)

我不想做一堆if语句,因为我从时间字符串中获取可以从一小时开始的时间。

这是我不想做的事情:

if (int.Parse(fromTimeString.Right(2)) < 30)
{
    //Do Calculation
}
else
{
    //Do Calculation
}

public static string Right(this String stringValue, int noOfCharacters)
{
    string result = null;

    if (stringValue.Length >= noOfCharacters)
    {
        result = stringValue.Substring(stringValue.Length - noOfCharacters,       noOfCharacters);
    }
    else
    {
        result = "";
    }

    return result;
}

使用linqDateTime

是否有更简单的方法

7 个答案:

答案 0 :(得分:10)

将模数运算符%与30一起使用。您的结果将等于(60 - currentMinutes) % 30。关于它用于集合的LINQ,所以我无法真正了解它如何在您的案例中使用。

答案 1 :(得分:3)

var minutesToNextHalfHour = (60 - yourDateTimeVariable.Minutes) % 30;

答案 2 :(得分:3)

您可以使用此DateTime刻度轮方法获取下半小时的时间段:

var minutes = 30;
var now = DateTime.Now;
var ticksMin = TimeSpan.FromMinutes(minutes).Ticks;
DateTime rounded = new DateTime(((now.Ticks + (ticksMin/2)) / ticksMin) * ticksMin);
var diff=rounded-now;
var minUntilNext = diff.TotalMinutes > 0 ? diff.TotalMinutes : minutes + diff.TotalMinutes;

答案 3 :(得分:2)

这应该这样做:

int remainingMinutes = (current.Minute >= 30)
    ? 60 - current.Minute
    : 30 - current.Minute;

答案 4 :(得分:1)

var hhmm = fromTimeString.Split(':');
var mins = int.Parse(hhmm[1]);
var remainingMins = (60 - mins) % 30;

答案 5 :(得分:1)

var str = "7:16";
var datetime = DateTime.ParseExact(str, "h:mm", new CultureInfo("en-US"));
var minutesPastHalfHour = datetime.Minute % 30;
var minutesBeforeHalfHour = 30 - minutesPastHalfHour;

答案 6 :(得分:1)

我会使用modulo + TimeSpan.TryParse

public static int ComputeTime(string time)
{
    TimeSpan ts;

    if (TimeSpan.TryParse(time, out ts))
    {
        return (60 - ts.Minutes) % 30;
    }

    throw new ArgumentException("Time is not valid", "time");
}

private static void Main(string[] args)
{
    string test1 = "7:27";
    string test2 = "7:42";

    Console.WriteLine(ComputeTime(test1));
    Console.WriteLine(ComputeTime(test2));

    Console.ReadLine();
}