calculate week of year

조회 수: 5 (최근 30일)
Richard
Richard 2012년 12월 18일
댓글: Erik Johannes Loo 2021년 10월 25일
I have an annual time series where measurements are recorded at hourly intervals:
StartDate = '2011-01-01 00:00';
EndDate = '2011-12-031 23:00';
DateTime=datevec(datenum(StartDate,'yyyy-mm-dd HH:MM'):60/(60*24):...
datenum(EndDate,'yyyy-mm-dd HH:MM'));
dat = 2+(20-2).*rand(size(DateTime,1),1);
I would like to calculate the mean 24 hour cycle for each week of the year i.e. for week 1, day of year 1 to 7 I want to calculate the average 00:00, 01:00,... and so on so eventually I will end up with 52, 24 hour series i.e. one for each week of the year. Matlab does have a function called 'weeknum' which returns the week number from a given seriel date number, however, this function is in the financial toolbox. Can anyone suggest an alternative methdo for finding week number?

채택된 답변

Jan
Jan 2012년 12월 18일
function weekOfYear = yourWeekNum(s)
% Get 1st of January of the year:
v = datevec(s);
v1 = v;
v1(:, 2:3) = 1;
v1(:, 4:6) = 0;
s1 = datenum(v1);
dayOfYear = s - s1;
weekOfYear = floor(dayOfYear / 7) + 1;
Please check this, because it is written in the editor and not tested.
  댓글 수: 2
Richard
Richard 2012년 12월 18일
works great.
DWag
DWag 2020년 3월 27일
Yes it's great! And just a note for whoever uses it in the future, choose a date and double-check it to make sure it rounds to your needs. I rounded up isntead of having partial days.

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

추가 답변 (1개)

Steven Lord
Steven Lord 2020년 3월 27일
Since the original question was written, we introduced datetime. If you're representing your time and date data as a datetime, call week on your datetime with 'weekofyear' as the weekType input.
  댓글 수: 2
Rahul Shinde
Rahul Shinde 2021년 7월 22일
I tried running the code
week(datetime(2016,2,29))
I am expecting Week 9 as per ISO-8601.(here)
However I am getting ans as 10 in my matlab command window.
Am I missing anything?
Regards,
Erik Johannes Loo
Erik Johannes Loo 2021년 10월 25일
I will suggest something that I am not 100% sure it is correct - but I also haven't found satisfactory answers elsewhere:
sum(weekday(dateshift(inputDate, 'start', 'year'):dateshift(inputDate, 'end', 'week')) == 5)
This snippet basically counts the no. of Thursdays up to and including the week of the input date and should satisfy the ISO standard definition that the first week is (as per Wikipedia):
  • the week with the starting year's first Thursday in it (the formal ISO definition)

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

카테고리

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