c# – 这是用TimeSpan代表几十年的最佳方式吗?
发布时间:2020-12-15 08:39:48 所属栏目:百科 来源:网络整理
导读:我正在制作一张涵盖“1930-1940”,“1940-1950”,“1950-1960”,“1960-1970”的图表,…… 我想用DateTime和Timespan表示这个,但我不确定如何制作TimeSpan,我发现很难验证我的时间跨度是否正确. 这是我应该如何使用TimeSpan,还是重叠?如果它重叠,那么我该如
我正在制作一张涵盖“1930-1940”,“1940-1950”,“1950-1960”,“1960-1970”的图表,……
我想用DateTime和Timespan表示这个,但我不确定如何制作TimeSpan,我发现很难验证我的时间跨度是否正确. 这是我应该如何使用TimeSpan,还是重叠?如果它重叠,那么我该如何解决呢? List<DateTime> list1 = new List<DateTime>(); List<TimeSpan> list2 = new List<TimeSpan>(); int startYearInt = 1930; int times = 0; const int intervalSize = 10; for (int i = startYearInt; i < 2020; i += intervalSize) { DateTime sYear = new DateTime(startYearInt + (intervalSize * times++),1,1); TimeSpan period = (sYear.AddYears(intervalSize)) - sYear; list1.Add(sYear); list2.Add(period); // <<-- Don't know if if this is correct? } 编辑: public bool IsInsidePeriod(DateTime dt) { return dt >= FromYearDateTime && dt < FromYearDateTime.Add(periodTimeSpan); } 解决方法
创建DateRange值类型比使用DateTime和TimeSpan更好.以
here为例.然后,您可以使用工厂方法为您提供十年的范围:DateRange.DecadeStartingOn(1930);.这样,您就可以提高抽象级别并处理代码本身所引用的概念.
您的IsInsidePeriod是DateRange的简单操作: public bool Includes(DateTime date) { return start <= date && date <= end; } (假设开始和结束都包括在内) 现在,如果你只需要处理数十年,那么你真的不需要一个完整的DateRange类,就这样: class Decade { public int StartYear { get; private set; } public int EndYear { get { return StartYear + 9; } } public Decade(int startYear) { StartYear = startYear; } public bool Includes(DateTime date) { return StartYear <= date.Year && date.Year <= EndYear; } public override string ToString() { return string.Format("{0}-{1}",StartYear,EndYear + 1); } } 或者更普遍的YearRange. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |