2015-04-17 6 views
0

Мне нужно ввести 2 даты, представляющие собой даты дат. Для этих дат мне нужно будет вернуть список сезонов, которые находятся между этими датами. Возможно ли иметь решение без необходимости итерации в течение всех дней между этим диапазоном?Получите сезоны в диапазоне дат

Например, для даты: 25/12/2014 - 17/7/2015
Результат будет: Зима, Весна, Лето


Времена год будет уже определен в постоянная значениях
Сезоны:

  • Зима: 21 декабря - 20 марта
  • весна: 21 марта - 20 июня
  • Лето: 21 июня - 20 сентября
  • осень: 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

Даже я видел ответ на повторяющийся вопрос, и он не является полным с точки зрения вариации продолжительности сезона –

Смежные вопросы