如何将剩余分钟计算为“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;
}
使用linq
或DateTime
类是否没有更简单的方法
使用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();
}