仅在给出时间时获得Interval界限的更好方法

时间:2018-05-20 03:32:10

标签: c# datetime intervals

当给出upper-bound and lower-bound时,我必须根据间隔类型找出间隔的限制,即间隔的datetime

示例:说给定时间= 12:05 (然后,这位于 12:00 - 1:00 的区间范围内间隔类型是每小时; 12:00 - 12:30 如果间隔类型是半小时; 12:00 - 12:15 如果间隔类型是每季度。同样间隔类型可以是任何东西。

目前我正在应用程序加载的字典对象中加载所有不同的间隔范围集,然后在给定时间内从该字典中获取间隔范围。

对不起,我知道这个问题陈述看起来很简单,但现在还想不到其他方法。如果有人能在这里帮助我会很有帮助。提前谢谢。

1 个答案:

答案 0 :(得分:3)

您可以通过将总分钟除以您的间隔,然后从总分钟中减去余数来计算范围开始。之后,您可以轻松地结束范围。

首先,您需要使用DateTime.TimeOfDayDateTime对象中的时间部分作为TimeSpan。然后使用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);

<强> Try it online