Conversion of dates to a different format

Hi,
I need to convert 20110530 (2011 May 30) to 2011150 (which is the 150th day since January 01, 2011). How can i perform this task in MATLAB?

 Accepted Answer

The new date and time functions probably have built-in functions to do what you want, but in their absence, this works:
t_str = '20110530';
dn = datenum('20110530', 'yyyymmdd');
dnstart = datenum(dt_str(1:4), 'yyyy'); % Start Of 2011
dayofyear = dn-dnstart+1
Result = sprintf('%4s%03d', dt_str(1:4),dayofyear)
Result =
2011150
The +1 is necessary for ‘dayofyear’ because it computes the difference between 01-Jan-2011 and doesn’t include 01-Jan-2011.
EDIT — Added ‘Result’ assignment.

4 Comments

OK. Thanks. How can I write the output as '2011150'? In this case 2011<dayofyear>?
My pleasure.
To write it as a string, use the ‘Result’ in my code. (The quotes do not display.) The initial string construction is the easiest way to create it.
To convert it to a number, this works:
ResultNr = str2num(Result)
To convert it to a cell (that will display the quotes), just put curly braces {} around ‘Result’.
Thanks again.
As always, my pleasure.

Sign in to comment.

More Answers (1)

In R2014b or later, use datetime.
Convert a yyyyMMdd string to a datetime:
>> d = datetime('20110530','Format','yyyyMMdd')
d =
20110530
Change its display format to show day of year:
>> d.Format = 'yyyyDDD' % includes a leading zero for dates before 10 Apr
d =
2011150
Get the day of year as a number:
>> day(d,'dayofyear')
ans =
150
Convert to string (though you likely don't need to do this unless you're exporting to outside of MATLAB):
>> char(d) % or use cellstr for multiple dates
ans =
2011150
Convert a number in yyyyMMdd format to a datetime:
>> d = datetime(20110530,'ConvertFrom','yyyyMMdd')
d =
30-May-2011 00:00:00

Categories

Asked:

on 6 Oct 2015

Commented:

on 7 Oct 2015

Community Treasure Hunt

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

Start Hunting!