rad*_*byx 6 c# datetime timespan visual-studio-2010 visual-studio
我正在制作一张图表 "1930-1940", "1940-1950", "1950-1960", "1960-1970", ...
我想用a DateTime和a 代表这个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?
}
Run Code Online (Sandbox Code Playgroud)
编辑:我也有这个.如果我的时间跨度太小或持续时间可能会产生一些问题.
public bool IsInsidePeriod(DateTime dt)
{
return dt >= FromYearDateTime && dt < FromYearDateTime.Add(periodTimeSpan);
}
Run Code Online (Sandbox Code Playgroud)
你是去创建一个更好的DateRange值类型比使用DateTime和TimeSpan这样.在这里看一个例子.然后,您可以使用工厂方法为您提供十年的范围:DateRange.DecadeStartingOn(1930);.这样,您就可以提高抽象级别并处理代码本身所引用的概念.
您IsInsidePeriod的操作简单DateRange:
public bool Includes(DateTime date) {
return start <= date && date <= end;
}
Run Code Online (Sandbox Code Playgroud)
(假设两个start和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);
}
}
Run Code Online (Sandbox Code Playgroud)
或者更一般YearRange.
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |