尝试手动模拟 24 小时时钟的翻转(使用数学与使用时间跨度类)。递增部分很容易弄清楚如何从 23:00 翻转到 0:00 以及从 0:00 开始,但是让它走另一条路却变得非常令人困惑。这是我到目前为止所拥有的:
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin / 60;
//increment or decrement the hour
if((double)newMin % 60 < 0 && (double)newMin % 60 > -1)
hourIncrement = -1;
Console.WriteLine("Hour increment is {0}: ", hourIncrement);
}
我发现的问题是当倒退时,如果模数在数字之间,它不会正确递减。示例:现在是 12:00,减去 61 分钟,我们知道时间将是 10:59,因为从 12:00 到 11:59 小时应该回滚 1 小时,然后从 11:00 回滚到 10 点 59 分。不幸的是,我计算它的方式:在这种情况下,newMin % 60 只获取第一个小时的回滚,但是由于第二个回滚在技术上是 -1.0166 作为余数,并且由于 mod 只返回一个整数,所以它四舍五入。我确定我在这里错过了一些基本的数学,但有人可以帮助我吗?
编辑:我已经用多种方式写了这篇文章。有些比其他的更接近,但我知道这比看起来更简单。我知道这似乎有点“他在做什么”,但你应该能够基本上看到我想要做什么。增加时钟并将其从 23:59 翻转到 0:00 很容易。事实证明,倒退并不容易。
好的,这是带有翻转的 incrementMinute。简单的。但试着倒退。不工作。
static void IncrementMinute(int min, int incr)
{
int newMin = min + incr,
hourIncrement = newMin / 60;
min = newMin % 60;
Console.WriteLine("The new minute is {0} and the hour has incremented by {1}", min, hourIncrement);
}