Converting Day of Year to month and day
72 views (last 30 days)
Show older comments
Dear All
I have the following data:
epoch= '96318.74847837'
'96319.62211352'
'96319.62351606'
'96319.62356237'
'96320.05952563'
'96320.49676119'
the firs 2 elements of the data is year '96' and rest is the day of year '318.74847837'. I got the following code to separate them.
year=cellfun(@(y) y(1:2),epoch,'uni',false);
day=cellfun(@(y) y(3:5),epoch,'uni',false);
And the following code to convert day of year to date and month.
doy=318;
dayspermonth = [0 31 28 31 30 31 30 31 31 30 31 30 31];
mm = ones(size(doy))*NaN;
dd = ones(size(doy))*NaN;
for im = 1:12
I = find(doy > sum(dayspermonth(1:im)) & doy <= sum(dayspermonth(1:im+1)));
mm(I) = ones(size(I)).*im;
dd(I) = doy(I) - ones(size(I))*sum(dayspermonth(1:im));
end
I would like to take the input of day into doy so that I have a single array of doy with all the results from day.
I know this code is not taking care of leap year. but if someone can help me with that I would be grateful.
Thanks!!
1 Comment
Star Strider
on 25 Sep 2012
LEAP YEARS — To find and work with leap years, see the documentation for eomday. You can use it to create your dayspermonth vector for any given year, including correct values for leap years.
Accepted Answer
Andrei Bobrov
on 25 Sep 2012
Edited: Andrei Bobrov
on 25 Sep 2012
% Let y - our year
y = 1996;
doy = 318.25;
[yy mm dd HH MM] = datevec(datenum(y,1,doy));
variant of full solution
x= {'96318.74847837'
'96319.62211352'
'96319.62351606'
'96319.62356237'
'96320.05952563'
'96320.49676119'} % initial array
a = str2double(x);
y = fix(a/1000);
[yy mm dd HH MM SS] = datevec(datenum(y,0,a - y*1000)); % corrected
4 Comments
More Answers (2)
Jan
on 25 Sep 2012
Edited: Jan
on 25 Sep 2012
When I understand you correctly, this is the question:
Convert "doy" to "day" and "month":
day = {'318.74847837', ...
'319.62211352', ...
'319.62351606', ...
'319.62356237', ...
'320.05952563', ...
'320.49676119'};
Solution:
daynum = sscanf(sprintf('%s*', day{:}), '%g*');
datev = datevec(daynum);
day = datev(:, 3); % [EDITED]
month = datev(:, 2); % [EDITED]
Now this does not consider the leap year. To do this:
daynum = sscanf(sprintf('%s*', day{:}), '%g*');
yearnum = sscanf(sprintf('%s*', year{:}), '%g*');
yearvec = zeros(numel(yearnum), 6);
yearvec(:, 1) = yearnum; % [EDITED], no transpose
yearvec(:, 1) = 1;
% Perhaps also: yearvec(:,3) = 1;
yearsn = datenum(yearvec);
datesn = yearsn + daynum;
datev = datevec(datesn);
day = datev(:, 3); % [EDITED]
month = datev(:, 2); % [EDITED]
michele paoletti
on 14 Jun 2019
I need convert from year and day of year to day and month. How can i do?
2 Comments
Andrei Bobrov
on 14 Jun 2019
Let:
year1 = 2019;
dayofyear = 241;
then:
out = datetime(2019,1,dayofyear)
See Also
Categories
Find more on Dates and Time in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!