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