获得准确的三分钟时间值

时间:2012-02-15 04:17:15

标签: c# .net datetime time

获得三分钟时间值(例如15.02.2012 07:00:00,15.02.2012 07:03:00,15.02.2012 07:06:00,...,15.02.2012 07:57 :00)我使用以下代码:

static private DateTime CurrentTime (DateTime now)
        {
            DateTime val;
            val = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0)
                    .AddMinutes(((now.Minute) / 3) * 3 - now.Minute);
            return val;
        }

并在以下代码中使用:

static void Main(string[] args)
        {
            DateTime ts = new DateTime(2012, 2, 15, 08, 1, 0);
            DateTime ts1 = new DateTime(2012, 2, 15, 7, 59, 58);
            Console.WriteLine(ts.ToString("dd.MM.yyyy HH:mm:ss.fff") + " is " + CurrentTime(ts).ToString("dd.MM.yyyy HH:mm:ss.fff"));
            Console.WriteLine(ts1.ToString("dd.MM.yyyy HH:mm:ss.fff") + " is " + CurrentTime(ts1).ToString("dd.MM.yyyy HH:mm:ss.fff"));
        }

输出:

15.02.2012 08:01:00.000 is 15.02.2012 08:00:00.000
15.02.2012 07:59:58.000 is 15.02.2012 07:57:00.000

但是在第二行我得到了错误 - 而不是15.02.2012 07:57:00.000必须是15.02.2012 08:00:00.000。 如何解决这个错误?感谢。

3 个答案:

答案 0 :(得分:0)

这个位错了

AddMinutes(((now.Minute) / 3) * 3 - now.Minute)

如果now.Minutes是59

59/3 = 19。

19 * 3 = 57

57 - 59 = -2

59 + -2 = 57(就像你看到的那样)

看起来你想要进行舍入而不是截断,所以最简单的做法就是将“3”分钟的一半加到“现在”。

DateTime tmp = now.AddMilliseconds(90*1000);

答案 1 :(得分:0)

要向DateTime添加三分钟,您可以使用以下功能,将您想要添加的分钟数乘以一分钟内的秒数:

private static DateTime AddNMinutes(DateTime dateTime, int numberOfMinutes)
{
   return dateTime.AddSeconds(numberOfMinutes * 60);
}

然后使用:

调用它
var myDateTime = DateTime.Now;
var myDateTimePlusThreeMinutes = AddNMinutes(myDateTime, 3);

答案 2 :(得分:0)

您需要将秒数考虑在内:

static private DateTime CurrentTime (DateTime now)
{
    return now.Date.AddSeconds((now.TimeOfDay.TotalSeconds + 90) / 180 * 180);
}