diff --git a/matlab/@dates/colon.m b/matlab/@dates/colon.m index 4449d9a3f68668b0ae84a8899f1adcddb35383c6..76e78a22789f105219269e8d63b9941b9f23a466 100644 --- a/matlab/@dates/colon.m +++ b/matlab/@dates/colon.m @@ -68,23 +68,18 @@ end C = dates(); n = (B-A)+1; +if d>1 + n = length(1:d:n); +end C.freq = A.freq; C.ndat = n; C.time = NaN(n,2); C.time(1,:) = A.time; -current_date = A; -linee = 1; - -while current_date<B - linee = linee+1; +for linee=2:n C.time(linee,:) = add_periods_to_array_of_dates(C.time(linee-1,:), C.freq, d); - current_date = current_date + d; end -C.time = C.time(1:linee,:); -C.ndat = rows(C.time); - %@test:1 %$ % Define two dates %$ date_1 = '1950Q2'; diff --git a/matlab/utilities/dates/add_periods_to_array_of_dates.m b/matlab/utilities/dates/add_periods_to_array_of_dates.m index 7274a1a785fed9e2b3e8e04bbfed0bde3bf5aa52..48a371739a22767f65bd1e2215c1ae71a704a7e6 100644 --- a/matlab/utilities/dates/add_periods_to_array_of_dates.m +++ b/matlab/utilities/dates/add_periods_to_array_of_dates.m @@ -27,12 +27,16 @@ time(:,1) = time(:,1) + fix(p/freq); time(:,2) = time(:,2) + rem(p,freq); id1 = find(time(:,2)>freq); -time(id1,1) = time(id1,1) + 1; -time(id1,2) = time(id1,2) - freq; +if ~isempty(id1) + time(id1,1) = time(id1,1) + 1; + time(id1,2) = time(id1,2) - freq; +end id2 = find(time(:,2)<1); -time(id2,1) = time(id2,1) - 1; -time(id2,2) = time(id2,2) + freq; +if ~isempty(id2) + time(id2,1) = time(id2,1) - 1; + time(id2,2) = time(id2,2) + freq; +end %@test:1 %$ t(1) = dyn_assert(add_periods_to_array_of_dates([1950 1], 4, 1),[1950 2]); diff --git a/matlab/utilities/dates/string2date.m b/matlab/utilities/dates/string2date.m index 139b65dbf4fd09693f3be64500b337226b43a087..bb91a05fb3b693c196576f842e8a16b6d698129d 100644 --- a/matlab/utilities/dates/string2date.m +++ b/matlab/utilities/dates/string2date.m @@ -26,7 +26,7 @@ end if isyearly(a) year = 1:(regexp(a,'[AaYy]')-1); date.freq = 1; - date.time = write_time_field(a, year); + date.time = write_time_field_y(a, year); return end @@ -51,13 +51,14 @@ if isweekly(a) return end + function b = write_time_field(c, d) - b(1) = str2num(c(d)); - if ismember(c(d(end)+1),{'Y','y','A','a'}) - b(2) = 1; - else - b(2) = str2num(c(d(end)+2:end)); - end + b(1) = str2double(c(d)); + b(2) = str2double(c(d(end)+2:end)); + +function b = write_time_field_y(c, d) + b(1) = str2double(c(d)); + b(2) = 1; %@test:1 %$