Carryover in Date Vectors and Strings
Note
The datenum
and datestr
functions are not
recommended. Instead, use datetime
values to represent points in time
rather than serial date numbers or date vectors. Unlike these numeric representations,
datetime
values display in a human-readable format, and have
properties to account for time zones and leap seconds. For more information on updating
your code to use datetime
values, see Replace Discouraged Instances of Serial Date Numbers and Date Strings.
If an element falls outside the conventional range, MATLAB® adjusts both that date vector element and the previous element. For example,
if the minutes element is 70
, MATLAB adjusts the hours element by 1
and sets the minutes element
to 10
. If the minutes element is -15
, then MATLAB decreases the hours element by 1
and sets the minutes
element to 45
.
In this example, the month element has a value of 22. MATLAB increments the year value to 2022 and sets the month to October. Both the
datetime
and datestr
functions adjust for the
month element that is outside the conventional range. However, datestr
is not recommended.
d1 = datetime([2021 22 03 00 00 00])
d1 =
datetime
03-Oct-2022
d2 = datestr([2021 22 03 00 00 00])
d2 = '03-Oct-2022'
The functions account for negative values the same way in any component that is not a
month component. For example, these calls both take inputs with month specified as
7
(July) and the number of days specified as -5
.
They both subtract five from the last day of June, which is June 30, to yield a return date
of June 25, 2022.
d1 = datetime([2022 07 -05 00 00 00])
d1 =
datetime
25-Jun-2022
d2 = datestr([2022 07 -05 00 00 00])
d2 = '25-Jun-2022'
The exception to this rule occurs when the month component is a number less than
1
. In that case, datetime
and
datestr
behave differently. The datetime
function subtracts the month component from the beginning of the year component, so that the
output date occurs during the previous year. For example, this call with inputs for the year
2022 returns a date of July 3, 2021 because the month component is
-5
.
d1 = datetime([2022 -5 3 0 0 0])
d1 =
datetime
03-Jul-2021
However, datestr
instead sets the month component of the output to
January 2022. When the input has a month component that is less than 1
,
datestr
treats it as 1
.
d2 = datestr([2022 -5 3 0 0 0])
d2 = '03-Jan-2022'
The carrying forward of values also applies when you use the
datenum
function to convert text representing dates and times. For
example, datenum
interprets October 3, 2022 and September 33, 2022 as
the same date, and returns the same serial date number. But again,
datenum
is not recommended.
d = datenum("2022-10-03")
d = 738797
d = datenum("2022-09-33")
d = 738797
However, the datetime
function does not interpret the text
representing September 33, 2022. It does not attempt to carry over values in text that
specifies dates and times outside convention ranges. Instead the result is an error.
d = datetime("2022-10-03")
d =
datetime
03-Oct-2022
d = datetime("2022-09-33")
Error using datetime
Could not recognize the date/time format of '2022-09-33'. You can specify a format using the 'InputFormat'
parameter. If the date/time text contains day, month, or time zone names in a language foreign to the
'en_US' locale, those might not be recognized. You can specify a different locale using the 'Locale'
parameter.