C# 获取准确的三分钟时间值

C# 获取准确的三分钟时间值,c#,.net,datetime,time,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.Da

为了获取三分钟时间值(例如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"));
        }
并在以下代码中使用此选项:

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。 如何纠正这个错误?谢谢。

这一点不对

AddMinutes(((now.Minute) / 3) * 3 - now.Minute)
如果现在。分钟是59分钟

59/3=19

19*3=57

57-59=-2

59+-2=57(如您所见)

看起来您希望舍入而不是截断,因此最简单的方法是在“现在”中添加半个3分钟


要向日期时间添加三分钟,可以使用以下函数,将要添加的分钟数乘以一分钟内的秒数:

private static DateTime AddNMinutes(DateTime dateTime, int numberOfMinutes)
{
   return dateTime.AddSeconds(numberOfMinutes * 60);
}
然后使用以下命令调用它:

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

您需要考虑秒数,如下所示:

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

代码将时间向下舍入到最接近的3分钟时间值。这是一个问题吗?我不想向下取整最近的第三分钟值,我想向下或向上取整到最近的第三分钟,如果值介于07:59:30.000和08:00:30.000之间-结果必须是08:00:00.000您的意思是,07:58:30.000和08:01:30.000之间的时间必须四舍五入到08:00:00.000吗?我发布了一个答案。例如:我有以下时间值15.02.2012 07:59:58.000?我想把这个值四舍五入到最接近的三分钟时间值。一般来说,我希望在CurrentTime中使用第二个参数来指定要舍入的增量,例如,如果值介于07:59:30.000和08:00:30.000之间-结果必须是08:00:00.000。如果添加90秒,然后使用现有代码,它应该可以工作。可能有更好的方法,但我认为这会有效。如果值介于07:59:30.000和08:00:30.000之间,可能需要60秒-结果必须是08:00:00.000?我认为它仍然有效。07:59:45+90秒=08:01:15。分钟=1。1/3=0,*3=0,-1=-1,让你回到08:00。试试看!我使Console.WriteLine(ts.ToString(“dd.MM.yyyy HH:MM:ss.fff”)+“是”+当前时间(ts.AddSeconds(60)).ToString(“dd.MM.yyyy HH:MM:ss.fff”);Console.WriteLine(ts1.ToString(“dd.MM.yyyy HH:MM:ss.fff”)+“是”+当前时间(ts1.AddSeconds(60)).ToString(“dd.MM.yyyy HH:MM:ss.fff”);Console.WriteLine(ts1.ToString(“dd.MM.yyyy HH:MM:ss.fff”)+“是”+当前时间(ts2.AddSeconds(60)).ToString(“dd.MM.yyyy HH:MM:ss.fff”);获取:15.02.2012 08:01:00.000是15.02.2012 08:00:00.000 15.02.2012 07:59:58.000是15.02.2012 08:00.000 15.02.2012 07:59:58.000是15.02.2012 08:00:00.000请看我的下一个问题