如何将剩余分钟计算为“0”;下一个“;半小时或一小时

本文关键字:下一个 一小时 半小时 计算 余分钟 分钟 | 更新日期: 2023-09-27 18:25:12

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

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

That would be 15min.

然后我也可以有一个例子,其中开始时间可以是07:45,我希望它计算最接近小时(08:00)的剩余分钟。

That would also be 15min.

因此,任何一小时内小于30min的字符串都将计算到最接近半小时的(..:30),任何超过30min的字符串将计算到最近的小时(..: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类是否没有更简单的方法

如何将剩余分钟计算为“0”;下一个“;半小时或一小时

使用30的模运算符%。您的结果将等于(60 - currentMinutes) % 30。关于LINQ,它用于集合,所以我真的看不出它如何在您的情况下使用。

您可以使用此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;
var minutesToNextHalfHour = (60 - yourDateTimeVariable.Minutes) % 30;

这应该做到:

int remainingMinutes = (current.Minute >= 30)
    ? 60 - current.Minute
    : 30 - current.Minute;
var hhmm = fromTimeString.Split(':');
var mins = int.Parse(hhmm[1]);
var remainingMins = (60 - mins) % 30;
var str = "7:16";
var datetime = DateTime.ParseExact(str, "h:mm", new CultureInfo("en-US"));
var minutesPastHalfHour = datetime.Minute % 30;
var minutesBeforeHalfHour = 30 - minutesPastHalfHour;

我将使用模+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();
}