Лучший способ получить границы интервала, когда дается только время - PullRequest
0 голосов
/ 20 мая 2018

Я должен выяснить пределы интервала, т.е. upper-bound and lower-bound интервала, основанного на типе интервала, когда задано datetime.

Пример : скажем, заданное время = 12: 05 (тогда это лежит в интервале интервалов 12: 00 - 1: 00 , еслитип интервала ежечасный; 12: 00 - 12: 30 если тип интервала основан на получасе; 12: 00 - 12: 15 если тип интервала ежеквартальный.может быть любым.

В настоящее время я загружаю все различные наборы интервалов интервалов в объекте словаря при загрузке приложения, а затем извлекаю интервал интервалов из этого словаря в течение заданного времени.

Извините,Я знаю, что это постановка проблемы выглядит просто, но на данный момент не могу придумать другие подходы. Было бы полезно, если бы кто-то мог помочь мне здесь. Заранее спасибо.

1 Ответ

0 голосов
/ 20 мая 2018

Вы можете рассчитать начало диапазона, разделив общее количество минут на ваш интервал, а затем вычтя остаток от общего количества минут.После этого вы можете легко получить конец диапазона.

Во-первых, вам нужно получить часть времени из вашего объекта DateTime как TimeSpan, используя DateTime.TimeOfDay.Затем используйте TimeSpan.TotalMinutes.

Вот хорошее начало:

public class TimeRange
{
    public TimeRange(TimeSpan from, TimeSpan to)
    {
        From = from;
        To = to;
    }

    public TimeSpan From { get; set; }
    public TimeSpan To { get; set; }
}

public TimeRange GetRange(DateTime d, int minutesInterval)
{
    TimeSpan time = d.TimeOfDay;
    var from = time.TotalMinutes - (time.TotalMinutes % minutesInterval);
    var to = from + minutesInterval;

    return new TimeRange(TimeSpan.FromMinutes(from), TimeSpan.FromMinutes(to));
}

Для ясности я создал простой класс с именем TimeRange, представляющий начало и конецдиапазона интервалов.Вы можете, однако, не стесняйтесь обращаться с этим по-другому.

Использование:

DateTime d = DateTime.Now;

TimeRange range = GetRange(d, 60);
//TimeRange range = GetRange(d, 15);
Console.WriteLine("From: {0}\r\nTo: {1}", range.From, range.To);

Попробуйте онлайн .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...