Main Content

日期向量和字符串结转

注意

不推荐使用 datenumdatestr 函数。请改用 datetime 值来表示时间点,而不是日期序列值或日期向量。与这些数值表示不同,datetime 值以人工易读格式显示,并具有考虑时区和闰秒的属性。有关更新代码以使用 datetime 值的详细信息,请参阅Replace Discouraged Instances of Serial Date Numbers and Date Strings

如果某元素不在常规范围内,则 MATLAB® 会同时调整该日期向量元素及其前面的元素。例如,如果分钟元素为 70,则 MATLAB 会将小时元素调整 1 并将分钟元素设置为 10。如果分钟元素为 -15,则 MATLAB 会将小时元素减少 1 并将分钟元素设置为 45

在以下示例中,月份元素的值为 22。MATLAB 将年份值增加到 2022 并将月份设置为十月 (October)。datetimedatestr 函数都会针对常规范围之外的月份元素进行调整。但不推荐使用 datestr

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'

在任何非月份分量中,函数都以相同的方式处理负值。例如,这两个调用都接受指定为 7(七月)的月份和指定为 -5 的天数的输入。它们都从 6 月的最后一天(6 月 30 日)减去 5,得到 2022 年 6 月 25 日的返回日期。

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'

当月份分量是小于 1 的数字时,此规则会出现例外。在这种情况下,datetimedatestr 的行为不同。datetime 函数从年份分量的开头减去月份分量,这样输出日期就出现在上一年。例如,对于年份为 2022 的输入,此调用返回日期 2021 年 7 月 3 日,因为月份分量是 -5

d1 = datetime([2022 -5 3 0 0 0])
d1 = 

  datetime

   03-Jul-2021

但是,datestr 却将输出的月份分量设置为 2022 年 1 月。当输入中的月份分量小于 1 时,datestr 会将其视为 1

d2 = datestr([2022 -5 3 0 0 0])
d2 =

    '03-Jan-2022'

当使用 datenum 函数转换表示日期和时间的文本时,结转值也适用。例如,datenum 将 2022 年 10 月 3 日和 2022 年 9 月 33 日解释为相同的日期,并返回相同的日期序列值。但是,同样不推荐使用 datenum

d = datenum("2022-10-03")
d =

      738797
d = datenum("2022-09-33")
d =

      738797

不过,datetime 函数不解释表示 2022 年 9 月 33 日的文本。它不会尝试将指定日期时间的文本中的值结转到常规范围之外。在这种情况下,结果是错误的。

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.