关于c#:在一系列日期内获取季节

Get the seasons within a range of dates

我需要输入2个日期代表一个日期范围。对于这些给定的日期,我需要返回这些日期之间的季节列表。有没有可能得到一个解决方案,而不需要在该范围之间的所有天数内迭代?

例如,日期:2014年12月25日-2015年7月17日
结果是:冬天、春天、夏天

季节将以常量值指定
季节:

  • 冬季:12月21日至3月20日
  • 春季:3月21日-6月20日
  • 夏季:6月21日至9月20日
  • 秋季:9月21日至21日十二月

例如,常量将存储如下。我发现的主要问题是冬季,因为一年会增加一个,一个月会从一开始。

1
2
3
4
5
6
7
8
9
10
11
    DateTimeOffset winterStart= new DateTimeOffset(year, 12, 21,0,0,0,new TimeSpan(0));
    DateTimeOffset winterEnd = new DateTimeOffset(year, 03, 19, 0, 0, 0, new TimeSpan(0));

    DateTimeOffset springStart = new DateTimeOffset(year, 03, 20,0,0,0,new TimeSpan(0));
    DateTimeOffset springEnd = new DateTimeOffset(year, 06, 19, 0, 0, 0, new TimeSpan(0));

    DateTimeOffset summerStart = new DateTimeOffset(year, 06, 20, 0, 0, 0, new TimeSpan(0));
    DateTimeOffset summerEnd = new DateTimeOffset(year, 09, 21, 0, 0, 0, new TimeSpan(0));

    DateTimeOffset autumStart = new DateTimeOffset(year, 09, 22, 0, 0, 0, new TimeSpan(0));
    DateTimeOffset autumEnd = new DateTimeOffset(year, 12, 20, 0, 0, 0, new TimeSpan(0));


如果您使用为季节指定的特定日期范围,则不需要每天检查该范围;我认为每3个月应检查一次,例如。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// get start and end as DateTime

int year;
DateTime springStart, summerStart, autumnStart, winterStart;

for (DateTime date = start; date < end; date = date.AddMonths(3))
{
    year = date.Year;
    springStart = new DateTime(year, 3, 21);
    //etc...
    if (date >= springStart && date < summerStart)
    { //etc...}
    else if (date >= winterStart || date < springStart)
    { //etc...}
}


季节是一个相对的术语,它取决于地点。就像澳大利亚一样,它的夏天结束了,而在亚洲,它是夏天的开始。此外,全球各地的季节持续时间也各不相同。在欧洲,春天持续的时间更长,而在南亚,春天只是名义上的。所以这是非常广泛的要求。