gpt4 book ai didi

c# - 这是用 TimeSpan 表示几十年的最佳方式吗?

转载 作者:太空狗 更新时间:2023-10-29 21:23:59 25 4
gpt4 key购买 nike

我正在制作一个图表,涵盖“1930-1940”、“1940-1950”、“1950-1960”、“1960-1970”、...

我想用 DateTimeTimespan 来表示,但我不太确定如何制作 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 值类型,而不是像这样使用 DateTimeTimeSpan。看here举个例子。然后,您可以使用一个工厂方法为您提供十年的范围:DateRange.DecadeStartingOn(1930);。通过这种方式,您可以提高抽象级别并处理您在代码本身中引用的概念。

您的IsInsidePeriodDateRange 的简单操作:

public bool Includes(DateTime date) {
return start <= date && date <= end;
}

(假设 startend 都包含)

现在,如果您只需要处理decades,您实际上并不需要完整的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

关于c# - 这是用 TimeSpan 表示几十年的最佳方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9670515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com