C# 给定开始和结束日期,以年/月/日/瞬时为单位获取最完整的间隔
给定一个开始和结束日期时间,如何获得“自然”年、月、日、瞬时的最完整间隔 谢谢你的帮助C# 给定开始和结束日期,以年/月/日/瞬时为单位获取最完整的间隔,c#,date,C#,Date,给定一个开始和结束日期时间,如何获得“自然”年、月、日、瞬时的最完整间隔 谢谢你的帮助 [TestMethod] public void MoreThanOneYear() { var start = new DateTime(2013, 1, 5, 2, 0, 0); var end = new DateTime(2015, 5, 5, 19, 0, 0); var intervals = DateTimeUtis.GetPer
[TestMethod]
public void MoreThanOneYear()
{
var start = new DateTime(2013, 1, 5, 2, 0, 0);
var end = new DateTime(2015, 5, 5, 19, 0, 0);
var intervals = DateTimeUtis.GetPeriods(start, end).ToList();
Assert.IsTrue(intervals.Count() == 7);
Assert.IsTrue(intervals[0].Granularity == Granularity.Instantaneous);
Assert.IsTrue(intervals[0].Interval.Start == new DateTime(2013, 1, 5, 2, 0, 0));
Assert.IsTrue(intervals[0].Interval.End == new DateTime(2013, 1, 6, 0, 0, 0));
Assert.IsTrue(intervals[1].Granularity == Granularity.Daily);
Assert.IsTrue(intervals[1].Interval.Start == new DateTime(2013, 1, 6, 0, 0, 0));
Assert.IsTrue(intervals[1].Interval.End == new DateTime(2013, 2, 1, 0, 0, 0));
Assert.IsTrue(intervals[2].Granularity == Granularity.Montly);
Assert.IsTrue(intervals[2].Interval.Start == new DateTime(2013, 2, 1, 0, 0, 0));
Assert.IsTrue(intervals[2].Interval.End == new DateTime(2014, 1, 1, 0, 0, 0));
Assert.IsTrue(intervals[3].Granularity == Granularity.Yearly);
Assert.IsTrue(intervals[3].Interval.Start == new DateTime(2014, 1, 1, 0, 0, 0));
Assert.IsTrue(intervals[3].Interval.End == new DateTime(2015, 1, 1, 0, 0, 0));
Assert.IsTrue(intervals[4].Granularity == Granularity.Montly);
Assert.IsTrue(intervals[4].Interval.Start == new DateTime(2015, 1, 1, 0, 0, 0));
Assert.IsTrue(intervals[4].Interval.End == new DateTime(2015, 5, 1, 0, 0, 0));
Assert.IsTrue(intervals[5].Granularity == Granularity.Daily);
Assert.IsTrue(intervals[5].Interval.Start == new DateTime(2015, 5, 1, 0, 0, 0));
Assert.IsTrue(intervals[5].Interval.End == new DateTime(2015, 5, 5, 0, 0, 0));
Assert.IsTrue(intervals[6].Granularity == Granularity.Instantaneous);
Assert.IsTrue(intervals[6].Interval.Start == new DateTime(2015, 5, 5, 0, 0, 0));
Assert.IsTrue(intervals[6].Interval.End == new DateTime(2015, 5, 5, 19, 0, 0));
}
编辑
我试图实现的是在两个日期之间获得尽可能大的相邻间隔。完成年间隔>月>日>瞬时
编辑2
业务场景是,我有一个SQL表,其中包含1分钟频率的原始数据,还有3个表包含合并数据(按年、月和日)。因此,对于开始日期和结束日期,我需要获得允许我优化查询的日期和时间间隔。如果在开始日期和结束日期之间有完整的年份,我可以从合并年份表中获取数据,如果没有,我尝试从月份表中获取数据,依此类推。通常,您不能。只是因为没有年和月的标准。您所能做的最佳近似值是确定您的情况下最合适的年份(365天、365.25天或其他一些规则)并使用/numberOfDaysInYear
另请参见:不太清楚你在问什么。DateTime的
.Subtract()
方法是否不符合您的要求?可能重复的Subtract将给出两个日期之间的时间跨度,而不是我要查找的时段。我添加了这个测试,希望它能比我的文字更好地解释:)也许这就是你想要的:不完全是,但这是一个非常酷的字符串扩展集合:)我认为我上一次编辑更好地解释了我要做的事情。