Conversion of dates to a different format

4 visualizzazioni (ultimi 30 giorni)
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?

Risposta accettata

Star Strider
Star Strider il 6 Ott 2015
Modificato: Star Strider il 6 Ott 2015
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 Commenti
Star Strider
Star Strider il 6 Ott 2015
As always, my pleasure.

Accedi per commentare.

Più risposte (2)

Peter Perkins
Peter Perkins il 7 Ott 2015
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

Stephen23
Stephen23 il 6 Ott 2015
This is very easy using my FEX submissions datenum8601 and datestr8601:
>> X = datenum8601('20110530');
>> datestr8601(X,'yn')
ans =
2011150

Categorie

Scopri di più su Dates and Time in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by