Получение точных трехминутных значений времени - PullRequest
0 голосов
/ 15 февраля 2012

Для получения трехминутных значений времени (например, 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 голосов
/ 15 февраля 2012

Чтобы добавить три минуты к DateTime, вы можете использовать следующую функцию, которая умножает количество минут, которое вы хотите добавить, на количество секунд в минуте:

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

, а затем вызываете его, используя:

var myDateTime = DateTime.Now;
var myDateTimePlusThreeMinutes = AddNMinutes(myDateTime, 3);
0 голосов
/ 15 февраля 2012

Вам необходимо учитывать следующие секунды:

static private DateTime CurrentTime (DateTime now)
{
    return now.Date.AddSeconds((now.TimeOfDay.TotalSeconds + 90) / 180 * 180);
}
0 голосов
/ 15 февраля 2012

Этот бит неверен

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

если сейчас. Минуты 59

59/3 = 19.

19 * 3 = 57

57 - 59 = -2

59 + -2 = 57 (как вы видите)

Похоже, вы хотите округлить, а не усечь, поэтому проще всего было быдобавьте половину 3 минут к «сейчас».

DateTime tmp = now.AddMilliseconds(90*1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...