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

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

Curious...how/who interprets
yyyymmdd(DTV)
?? There's some magic in a string of date format letters when used as a functional reference with a datetime object??? That seems truly bizarre.
‘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

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?
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

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
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'

카테고리

도움말 센터File Exchange에서 Dates and Time에 대해 자세히 알아보기

질문:

2016년 6월 19일

댓글:

dpb
2017년 12월 16일

Community Treasure Hunt

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

Start Hunting!

Translated by