Generate an 8-day datetime array between 2010 and 2021 which resets the 8-day count at the beginning of each year
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ziad Sari El Dine
am 5 Jul. 2022
Kommentiert: Ziad Sari El Dine
am 5 Jul. 2022
Hello, I need to generate an 8-day datetime array between 2010 and 2021; however, i need the 8-day interval to reset at the beginning of each year. For example, the final date in 2010 would be December 27 and i would like the next date to be January 1 2011, not January 4. The code below gives the 8-day intervals without resetting.
t1 = datetime(2010,1,1,0,0,0);
t2 = datetime(2021,12,31,0,0,0);
t = t1:caldays(8):t2;
0 Kommentare
Akzeptierte Antwort
Steven Lord
am 5 Jul. 2022
Let's start with a row vector of January 1sts.
Jan1st = datetime(2010:2021, 1, 1);
We want to compute a vector of days for each January 1st that increases by 8 days until the end of the year. Luckily the number of days in the year is not a multiple of 8, so each year will have the same number of values represented.
dayIncrements = days(0:8:365).';
If you were using release R2020b or later you could use implicit expansion to sum Jan1st and dayIncrements to generate a matrix. If you need this as a vector you could reshape it. Since you indicated you're using release R2018a you'd need to repmat the two vectors.
t = Jan1st + dayIncrements;
t2 = repmat(Jan1st, numel(dayIncrements), 1) + repmat(dayIncrements, 1, numel(Jan1st));
check = isequal(t, t2)
Now let's look at the first and last days in each column. Leap years end on December 26th, non leap years on December 27th.
firstAndLast = t([1 end], :)
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Dates and Time finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!