Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

转换日期向量返回意外输出

注意

最佳做法是使用 datetime 值来表示时间点,而不是日期向量。与日期向量不同,datetime 值以人工易读格式显示,通常无需转换为文本。如果需要将日期向量转换为文本,最佳做法是首先将其转换为 datetime 值,然后使用 stringchar 函数将 datetime 值转换为文本。虽然您可以使用 datestr 函数直接将日期向量转换为文本,但您可能会得到意外的结果,如本节中所述。

由于日期向量是一个 1×6 数值行向量,因此 datestr 函数可能会将输入日期向量解释为日期序列值向量,并返回异常输出。或者,它可能将日期序列值向量解释为日期向量。之所以存在这种多义性,是因为 datestr 采用启发式规则,该规则将一个 1×6 的行向量解释为日期向量或包含六个日期序列值的向量。作为 m×6 数值矩阵的输入也存在这种多义性,其中每行可以解释为一个日期向量或六个日期序列值。

例如,假设有一个包含年份 3000 的日期向量。此年份超出了 datestr 解释为日期向量元素的年份的范围。因此,输入被解释为一个 1×6 日期序列值向量。

d = datestr([3000 11 05 10 32 56])
d =

  6×11 char array

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

此处,datestr 将 3000 解释为一个日期序列值,并将其转换为文本 '18-Mar-0008'(0000 年 1 月 0 日之后第 3000 天的日期)。另外,datestr 还转换接下来的五个元素,就好像它们也是日期序列值一样。

有两种方法可以将这样的日期向量转换为文本。

  • 推荐方法是将日期向量转换为 datetime 值。然后使用 charcellstrstring 函数对其进行转换。datetime 函数始终将 1×6 数值向量视为日期向量。

    dt = datetime([3000 11 05 10 32 56]);
    ds = string(dt)
    
    dt =
    
        "05-Nov-3000 10:32:56"
    
  • 或者,使用 datenum 函数将其转换为日期序列值。然后,再使用 datestr 将日期数字转换为字符向量。

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

在将日期转换为文本时,datestr 会使用启发式规则将输入解释为日期向量或日期序列值。以一个 m×6 矩阵为例。在以下情况下,datestr 函数将该矩阵解释为 m 个日期向量:

  • 前五列包含整数。

  • 每一行之和的绝对值位于 1500–2500 范围内。

对于任何一行,如果上述任意一个条件为 false,则 datestr 会将该 m×6 矩阵解释为包含日期序列值的 m×6 矩阵。

通常,1700–2300 范围内带有年份的日期将被解释为日期向量。但是,datestr 可能会将月份值、日期值、小时值、分钟值或秒值超出正常范围的行解释为日期序列值。例如,datestr 能够正确解释年份 2020 的以下日期向量:

d = datestr([2020 06 21 10 51 00])
d =

    '21-Jun-2020 10:51:00'

但是,给定一个超出通常范围 (1–31) 的日期值,datestr 则会为该向量中的每个元素返回一个日期值。

d = datestr([2020 06 2110 10 51 00])
d =

  6×11 char array

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

同样,datetime 函数始终将数值输入视为日期向量。在这种情况下,它会计算适当的日期,将 2110 解释为自 2020 年 6 月初以来的第 2110 天。

d = datetime([2020 06 2110 10 51 00])
d = 

  datetime

   11-Mar-2026 10:51:00
  • 如果您有一个 datestr 可能错误地解释为日期序列值的日期向量矩阵,请使用 datetimedatenum 函数转换该矩阵。然后将这些值转换为文本。

  • 如果您具有一个 datestr 可能解释为日期向量的日期序列值矩阵,请首先将该矩阵转换为列向量。然后,再使用 datestr 转换列向量。

另请参阅

| | | | |

相关主题