Converting Date Vector Returns Unexpected Output

Because a date vector is a 1-by-6 vector of numbers, datestr might interpret your input date vectors as vectors of serial date numbers, or vice versa, and return unexpected output.

Consider a date vector that includes the year 3000. This year is outside the range of years that datestr interprets as elements of date vectors. Therefore, the input is interpreted as a 1-by-6 vector of serial date numbers:

datestr([3000 11 05 10 32 56])

ans =

18-Mar-0008
11-Jan-0000
05-Jan-0000
10-Jan-0000
01-Feb-0000
25-Feb-0000

Here datestr interprets 3000 as a serial date number, and converts it to the date string '18-Mar-0008'. Also, datestr converts the next five elements to date strings.

When converting such a date vector to a character vector, first convert it to a serial date number using datenum. Then, convert the date number to a character vector using datestr:

dn = datenum([3000 11 05 10 32 56]);
ds = datestr(dn)

ds =

05-Nov-3000 10:32:56

When converting dates to character vectors, datestr interprets input as either date vectors or serial date numbers using a heuristic rule. Consider an m-by-6 matrix. datestr interprets the matrix as m date vectors when:

  • The first five columns contain integers.

  • The absolute value of the sum of each row is in the range 1500–2500.

If either condition is false, for any row, then datestr interprets the m-by-6 matrix as m-by-6 serial date numbers.

Usually, dates with years in the range 1700–2300 are interpreted as date vectors. However, datestr might interpret rows with month, day, hour, minute, or second values outside their normal ranges as serial date numbers. For example, datestr correctly interprets the following date vector for the year 2014:

datestr([2014 06 21 10 51 00])

ans =

21-Jun-2014 10:51:00

But given a day value outside the typical range (1–31), datestr returns a date for each element of the vector:

datestr([2014 06 2110 10 51 00])

ans =

06-Jul-0005
06-Jan-0000
10-Oct-0005
10-Jan-0000
20-Feb-0000
00-Jan-0000

When you have a matrix of date vectors that datestr might interpret incorrectly as serial date numbers, first convert the matrix to serial date numbers using datenum. Then, use datestr to convert the date numbers.

When you have a matrix of serial date numbers that datestr might interpret as date vectors, first convert the matrix to a column vector. Then, use datestr to convert the column vector.