Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在一定的日期范围内确定季节_C#_Algorithm_Date - Fatal编程技术网

C# 在一定的日期范围内确定季节

C# 在一定的日期范围内确定季节,c#,algorithm,date,C#,Algorithm,Date,我需要输入代表一系列日期的2个日期。对于这些给定的日期,我需要返回这些日期之间的季节列表。是否有可能在不需要在该范围内的所有天数内迭代的情况下获得解决方案 例如日期:2014年12月25日至2015年7月17日 结果是:冬天、春天、夏天 季节将以常量值指定 季节: 冬季:12月21日至3月20日 春季:3月21日至6月20日 夏季:6月21日至9月20日 秋季:9月21日-21日 十二月 例如,常数将存储如下。我发现的主要问题是冬季,因为一年将增加一个,一个月将从1开始 DateT

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

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


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

  • 冬季:12月21日至3月20日
  • 春季:3月21日至6月20日
  • 夏季:6月21日至9月20日
  • 秋季:9月21日-21日 十二月
例如,常数将存储如下。我发现的主要问题是冬季,因为一年将增加一个,一个月将从1开始

    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));

季节是一个相对术语,取决于位置。就像在澳大利亚一样,夏天结束了,而在亚洲,夏天开始了。此外,季节的持续时间在全球范围内也各不相同。在欧洲,春天持续的时间更长,而在南亚,春天只是名字而已。因此,这是一个非常宽泛的要求。

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

// 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...}
}
//获取开始和结束日期时间
国际年;
日期时间:春季开始、夏季开始、秋季开始、冬季开始;
对于(DateTime日期=开始;日期<结束;日期=日期。添加月份(3))
{ 
年=日期。年;
springStart=新日期时间(年,3,21);
//等等。。。
如果(日期>=springStart&&date=冬季开始| |日期<春季开始)
{//etc.}
}

冬、春、夏、秋的具体日期定义是什么?假设您知道每个季节的开始和结束,你可以简单地检查第X季的开始和结束是否在该范围内。我不知道是谁重新打开了这个问题,但这实际上是在挖掘同一个问题,即根据
日期时间获取季节。其他事情(计算日期差异,根据这些差异检查哪个季节等)是一些细节。当然,这些只是我的观点,它们通常是错误的。@LasseV.Karlsen更新并包括我的赛季开始和结束dates@SonerGönül是的,我看到了那篇文章,你是对的,它们是相似的,如果我使用这种逻辑,我需要在我的范围内生成一个日期列表,并相互检查,这将是昂贵的。即使我已经看到了重复问题的答案,但就季节持续时间的变化而言,它并不完整。感谢这是完美解决我问题的最简单的解决方案>我对问题进行了过度思考,没有一个简单的或符号可以解决我从冬季到春季的问题。