Преобразование вектора даты возвращает неожиданный Вывод

Примечание

Лучшая практика должна использовать datetime значения, чтобы представлять моменты времени, а не векторы даты. В отличие от векторов даты, datetime значения отображаются в человекочитаемом формате, часто избегая потребности в преобразовании в текст. Если необходимо преобразовать вектор даты в текст, лучшая практика должна сначала преобразовать его в a datetime значение, и затем преобразовывать datetime значение к тексту при помощи string или char функции. В то время как можно преобразовать векторы даты в текст непосредственно при помощи 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' (дата, которая является спустя 3000 дней после 0 января 0000). Кроме того, datestr преобразует следующие пять элементов, как будто они также были последовательными числами даты.

Существует два метода для преобразования такого вектора даты к тексту.

  • Рекомендуемый метод должен преобразовать вектор даты в a datetime значение. Затем преобразуйте его с помощью char, cellstr, или string функция. 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.

Если любое условие является ложным, для какой-либо строки, то 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 как 2110-й день с начала июня 2020.

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

  datetime

   11-Mar-2026 10:51:00
  • Когда у вас есть матрица векторов даты это datestr может интерпретировать неправильно как последовательные числа даты, преобразовать матрицу при помощи любого datetime или datenum функции. Затем преобразуйте те значения в текст.

  • Когда у вас есть матрица последовательных чисел даты это datestr может интерпретировать как векторы даты, сначала преобразовать матрицу в вектор-столбец. Затем используйте datestr преобразовывать вектор-столбец.

Смотрите также

| | | | |

Похожие темы