How can I write all month's last dates for a given period of time?

1 vue (au cours des 30 derniers jours)
Giorgi
Giorgi le 28 Jan 2015
Commenté : Giorgi le 28 Jan 2015
Hello guys. Well I have daily time series form 1990-2015
% code
b=726867;
a=9125;
for i=1:a
b=b+1;
BigMatrix(i,1)=b;
end
BigMatrix=cellstr(datestr(BigMatrix));
Now I want to make another variable where I have only last date of months for a same period of time.
Thanks in advance

Réponse acceptée

Titus Edelhofer
Titus Edelhofer le 28 Jan 2015
Hi,
first of all: you don't need the loop
BigMatrix = b + (1:a);
BigMatrixStr = cellstr(datestr(BigMatrix));
For the last day of a month you have different possibilities. One is to use datevec and note, that the last day of a month is one day before the first of the next month:
% add one day and convert to date vectors:
BigMatrixVec = datevec(BigMatrix+1);
% remove all that are not the first of a month
BigMatrixVec(BigMatrixVec(:,3)~=1, :) = [];
% and subtract that one day again:
BigMatrixStrLast = cellstr(datestr(datenum(BigMatrixVec)-1));
Or use the datetime object that comes with R2014b:
dt = datetime(BigMatrix, 'ConvertFrom', 'datenum');
t = unique(dateshift(dt, 'end', 'month'));
% remove the last month if it's past the last dt
t(t>dt(end)) = [];
Titus
  1 commentaire
Giorgi
Giorgi le 28 Jan 2015
Well that is really good solution, thank you very much :)

Connectez-vous pour commenter.

Plus de réponses (2)

Sean de Wolski
Sean de Wolski le 28 Jan 2015

You could use lbusdate to get the last business day of the month specifying no weekend days:

weekend = zeros(1,7); % that's depressing :)
web(fullfile(docroot, 'finance/lbusdate.html'))

Andrei Bobrov
Andrei Bobrov le 28 Jan 2015
BigMatrix = cellstr(datestr(b+(1:a)'));

Catégories

En savoir plus sur Dates and Time dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by