仅给出时间时获得间隔边界的更好方法

Better way to get Interval bounds when only time is given

我必须找出区间的限制,即当给出 datetime 时,基于区间类型的区间的 upper-bound and lower-bound

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

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

抱歉,我知道这个问题陈述看起来很简单,但目前想不出其他方法。如果有人可以在这里帮助我,那将会很有帮助。提前致谢。

您可以通过将总分钟数除以您的间隔,然后从总分钟数中减去余数来计算范围。之后就可以很轻松的拿到区间的末端了。

首先,您需要使用 DateTime.TimeOfDay. Then use TimeSpan.TotalMinutes.

DateTime 对象中获取时间部分作为 TimeSpan

这是一个好的开始:

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 的简单 class 来表示间隔范围的开始和结束。但是,您可以随意以不同的方式处理它。

用法:

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.