2015-04-17 112 views
0

我需要輸入代表日期範圍的2個日期。對於這些給定日期,我需要返回這些日期之間的季節列表。是否可以有一個解決方案,而無需重複該範圍之間的所有日期?獲取日期範圍內的季節

例如,對於日期:25/12/2014 - 17/7/2015
結果將是:冬,春,夏


的季節將已經在一個恆定值規定
季節:

  • 冬季:12月21日至3月二十○日
  • 春季:三月21日至6月20日
  • 夏季:六月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)); 
+2

什麼是冬季,春季,夏季,秋季的具體日期的定義? –

+0

假設你知道每個賽季的開始和結束,你可以簡單地檢查第X季的開始和結束是否在該範圍內。 – npinti

+0

我不知道誰重新打開這個問題,但這和[關閉作爲我的副本](http://stackoverflow.com/q/1579587/447156)_actually_挖相同的問題,得到季節基於' DateTime'。其他的東西(計算日期差異,檢查哪些季節屬於這些差異等)是有點細節。當然,這些只是我的看法,他們通常是錯誤的。 –

回答

0

如果您使用季節中給定的特定日期範圍,則無需每隔一天檢查一次;我認爲每3個月應該做一次,例如

// 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...} 
} 
+0

感謝這是解決我的問題的最簡單的解決方案>我一直在考慮問題,並沒有現實主義的簡單或符號將解決我的問題,從冬季到春季。 –

+0

謝謝@FrankGrech! – IglooGreg

0

季節是其取決於位置相對而言的。就像在澳大利亞一樣,夏季即將結束,而在亞洲這裏是夏季的開始。而且,全球的季節持續時間也不盡相同。在歐洲,春季持續更長的時間,而在南亞,它只是名義上的。所以要求很寬泛。

+0

即使我已經看到了重複問題的答案,並且它在一個季節的持續時間方面並不完整 –