define time period for each year

조회 수: 5 (최근 30일)
Sehoon Chang
Sehoon Chang 2020년 11월 15일
댓글: Walter Roberson 2020년 11월 19일
Hi all,
I wish to re-define my time period.
The initial time period is as following:
The time period ranges from 01-10 (1st of Oct.) till 30-04 (30th of Apr.).
The range is defined by months only. The array 'Date' contains datetime value that is in yyyy-MM-dd format.
% starting month
sm = 5;
% ending month
em = 9;
% starting day
fd = 1;
% ending day
ld = 30;
PERIOD_1 = find(month(Date)<sm) | month(Date)>em)
PERIOD_2 = find(month(Date)>(sm-1) & month(Date)<(em+1))
As for a new time period, I wish to use both day values ('starting day' and 'ending day') as well, because if not...
i won't be able to define period that does not start on the 1st of a month (e.g. 04-10 till 27-04).
Thank you!

채택된 답변

Walter Roberson
Walter Roberson 2020년 11월 15일
[y, m, d] = ymd(YourDataTable.Date);
mask = m >= sm & m <= em & (m > sm | d >= fd) & (m < em | d <= ld);
selected_entries = YourDataTable(mask,:);
  댓글 수: 2
Peter Perkins
Peter Perkins 2020년 11월 19일
I was gonna say that it should also be possible to simplify this logical test by using 'dayofyear'. That makes it just
d = day(YourDataTable.Date,'dayofyear');
mask = d < 120 | d >= 274
but then ... stupid leap years! Still, you could modify that a bit to work.
Walter Roberson
Walter Roberson 2020년 11월 19일
Though the poster did say that the range was defined by month only, so
m = month(YourDataTable.Date);
mask = m <= 4 | m >= 10;
selected_entries = YourDataTable(mask,:);
I think my earlier code was selecting in the opposite sense, as I did not notice that they wanted October to April.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Dates and Time에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by