2015-01-07 2 views
0

Я хочу создать список дат, которые идут до конца февраля. Тем не менее, с конца февраля меняется с 28 до 29 в зависимости от того, есть ли високосный год, у меня возникли проблемы с рассмотрением обоих вариантов.серия данных до конца февраля - год високосного года или нет

Вот что я до сих пор:

date = datenum(years(i),12,01):1:datenum(years(i)+1,02,29); 

Этот случай, когда выполняется на год, что не високосный год, заканчивает отсчет с 1 марта вместо окончания 28-го февраля.

ответ

2

Вот небольшой взлом, который я придумал. Вы можете проверить, является ли год високосным довольно легко путем вычисления количества дней между 28 февраля и 1 марта, так как:

datenum(years(i), 3, 1) - datenum(years(i), 2, 28) 

Проверка, является ли это больше, чем 1 будет означать, високосный год. Это соглашение 1 или 0 MATLAB приводит ко второй части взлома: это точно количество дней, которое нужно добавить к 28 февраля: 0, если не високосный год, 1, если високосный год. Здесь, следовательно, является полным хак:

date = datenum(years(i),12,01):datenum(years(i)+1,02, ... 
       28 + ((datenum(years(i)+1,3,1) - datenum(years(i)+1,2,28))>1)); 

UPDATE/БЛАГОУСТРОЙСТВО: Ответа уже принят, но я придумал еще лучшим решением. Я не понимал, что datenum просто считает дни. В этом случае мы можем просто сказать, что последний день февраля - за день до 1 марта. Это приводит к следующему резкому упрощению:

date = datenum(years(i),12,01):1:(datenum(years(i)+1,3,1)-1); 
+3

Датчик, для хорошего или плохого, также принимает отрицательные и нулевые числа. Таким образом, последний день февраля можно записать: 'datenum (2015, 3, 0)'. С комментарием, объясняющим это безумие, конечно. – Peter

+0

Интересно. Вы просто наткнулись на этот трюк? – shizishan

+0

@Peter Вы должны обязательно опубликовать это как ответ! – Phonon

2

Давление, для хорошего или плохого, принимает отрицательные и нулевые числа. Таким образом, последний день февраля можно написать:

datenum(2015, 3, 0) 

С комментарием, объясняющим это безумие, конечно.

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