How can i generate month and year strings for Datetime vectors?

조회 수: 20 (최근 30일)
Steven Niggebrugge
Steven Niggebrugge 2016년 6월 19일
댓글: dpb 2017년 12월 16일
How can i generate month and year concatenated strings for Datetime vectors?
E.g. i have vector ['01/Jan/2015';'01/Feb/2015'], how can i transform this into [201501; 201502] ?

답변 (4개)

Star Strider
Star Strider 2016년 6월 20일
This works:
DTV = datetime(['01/Jan/2015';'01/Feb/2015']); % Create ‘datetime’ Object
Out = fix(yyyymmdd(DTV)/100) % Desired Output
Out =
201501
201502
  댓글 수: 3
Star Strider
Star Strider 2016년 6월 20일
‘Ours is not to reason why ...’
dpb
dpb 2016년 6월 20일
편집: dpb 2016년 6월 20일
Man, what that must do to the JIT optimizer...no wonder the newer versions suffer in size/performance to incorporate such...
I've not found this documented; I did discover there's
dateType — Type of values in X
'datenum' | 'excel' | 'juliandate' | 'posixtime' | 'yyyymmdd' | ...
which would let the above fix() operation work w/o the reference if used the 'yyyymmdd' output type when creating the object. It doesn't say default there altho presume it would be 'datenum'???
ADDENDUM/ERRATUM
OK, I did a search and indeed TMW did actually write and include a function yyyymmdd -- who'd've'a thunk of such an animuhl...but, anyway, it's not so magical after all; "there's nothing to see here, please move on" just a momentary "huh?!" as hadn't seen the function reference and it's just bizzare enough I didn't think of it as an ordinary function name.

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


dpb
dpb 2016년 6월 19일
편집: dpb 2016년 6월 20일
t = datetime(DateStrings,'InputFormat','dd/MMM/yyyy', ...
'Format','yyyyMM');
should do it (altho I don't have recent release to test...
OK, to actually convert to numerics,
str2num(datestr(datenum(['01/Jan/2015';'01/Feb/2015']),'YYYYmm'))
  댓글 수: 2
Steven Niggebrugge
Steven Niggebrugge 2016년 6월 20일
Hi, thanks for this, but it won't do the trick. This will keep the format as DateTime, it only present the value in a different way (yyyyMM instead of dd-MM-yyyy). I was looking for a conversion into a string or number variable, with value (e.g.) '201502', so no DateTime format. Any ideas on this?
dpb
dpb 2017년 12월 16일
While surely have solved the problem long ere now, a more recent comment brought the thread to attention--
The above is precisely what S Strider's answer does...

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


Shameer Parmar
Shameer Parmar 2016년 6월 20일
Hello Steven,
here is the code..
dateArray = ['01/Jan/2015';'01/Feb/2015'];
for i=1:size(dateArray,1)
date = dateArray(i,:);
dateSplit = regexp(date,'/','split');
switch dateSplit{2}
case 'Jan'
month = '01';
case 'Feb'
month = '02';
case 'Mar'
month = '03';
.
.
.
.
case 'Dec'
month = '12';
end
newDate(i,:) = [dateSplit{3},month];
end
  댓글 수: 2
Ayodele Ogunkoya
Ayodele Ogunkoya 2017년 12월 7일
Hello, I am new to matlab. I will like to create a monhtly loop. For example i will like to loop through each days of each months of the year so that i can save output of each month of the year
dpb
dpb 2017년 12월 16일
Better form would be to create a new question with specifics for you precise situation rather than bury a comment in an old thread expecting an answer.
If you have an array of datetime values, simply iterate. If that's not the problem/question, see above comment... :)

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


Peter Perkins
Peter Perkins 2016년 8월 3일
To create numbers use the Year and Month properties of a datetime
>> d = datetime+calmonths([1;2;3])
d =
03-Sep-2016 16:37:49
03-Oct-2016 16:37:49
03-Nov-2016 16:37:49
>> 100*d.Year + d.Month
ans =
201609
201610
201611
or use SS's suggestion:
>> fix(yyyymmdd(d)/100)
ans =
201609
201610
201611
To create strings you could just call num2str on that, or ...
>> cellstr(d,'yyyyMM')
ans =
'201609'
'201610'
'201611'

카테고리

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