Преобразование между массивами datetime, числами и текстом

Обзор

datetime является лучшим типом данных для представления моментов времени. значения datetime имеют гибкие форматы отображения и до точности наносекунды и могут составлять часовые пояса, летнее время и секунды прыжка. Однако, если вы работаете с кодом, созданным в MATLAB® R2014a или ранее, или если вы совместно используете код с другими, которые используют такую версию, вы можете должны быть работать с датами и время, сохраненное в одном из этих трех форматов:

  • Строка даты — вектор символа.

    Example:  Thursday, August 23, 2012  9:45:44.946 AM
  • Вектор даты — 1 6 числовой вектор, содержащий год, месяц, день, час, минуту, и второй.

    Example:  [2012   8    23    9    45    44.946]
    
  • Последовательный Номер Даты — единственный номер равняется номеру дней с января 0, 0000 в преждевременном календаре ISO. Последовательные числа даты полезны как входные параметры для некоторых функций MATLAB, которые не принимают типы данных duration или datetime.

    Example:  7.3510e+005

Строки даты, векторы и числа могут быть сохранены как массивы значений. Сохраните несколько строк даты в массиве ячеек из символьных векторов, несколько векторов даты в m-by-6 матрица и несколько последовательных чисел даты в матрице.

Можно преобразовать любой из этих форматов к массиву datetime с помощью функции datetime. Если ваш существующий код MATLAB ожидает последовательный номер даты или вектор даты, используйте datenum или функции datevec, соответственно, чтобы преобразовать массив datetime в ожидаемый формат данных. Чтобы преобразовать массив datetime в векторы символов, используйте функции cellstr или char.

Начиная в R2016b, также можно преобразовать массив datetime в массив строк с функцией string.

Преобразование между Datetime и векторами символов

Строка даты может быть вектором символа, состоявшим из полей, связанных с определенной датой и/или время. Существует несколько способов представлять даты и времена в текстовом формате. Например, все следующее является векторами символов, представляющими 23 августа 2010 в 16:35:42:

'23-Aug-2010 04:35:06 PM'
'Wednesday, August 23'
'08/23/10 16:35'
'Aug 23 16:35:42.946'

Строка даты включает символы, которые разделяют поля, такие как дефис, пробел и двоеточие, используемое здесь:

d = '23-Aug-2010 16:35:42'	

Преобразуйте одну или несколько строк даты в массив datetime с помощью функции datetime. Для лучшей производительности задайте формат входных строк даты как входной параметр к datetime.

Примечание

Спецификаторы, что использование datetime, чтобы описать форматы даты и времени отличается от спецификаторов, которые принимают datestr, datevec и функции datenum.

t = datetime(d,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = 

  datetime

   23-Aug-2010 16:35:42

Несмотря на то, что строка даты, d, и скаляр datetime, t, выглядит подобной, они не равны. Просмотрите размер и тип данных каждой переменной.

whos d t
  Name      Size            Bytes  Class       Attributes

  d         1x20               40  char                  
  t         1x1                17  datetime              

Преобразуйте массив datetime в вектор символа с помощью char или cellstr. Например, преобразуйте текущую дату и время к метке времени, чтобы добавить к имени файла.

t = datetime('now','Format','yyyy-MM-dd''T''HHmmss')
t = 

  datetime

   2017-01-03T151105
S = char(t);
filename = ['myTest_',S]
filename =

    'myTest_2017-01-03T151105'

Преобразование между массивами datetime и массивами строк

Начиная в R2016b, можно использовать функцию string, чтобы создать массив строк. Если массив строк содержит строки даты, то можно преобразовать массив строк в массив datetime с функцией datetime. Точно так же можно преобразовать массив datetime в массив строк с функцией string.

Преобразуйте массив строк. MATLAB отображает строки в двойных кавычках. Для лучшей производительности задайте формат входных строк даты как входной параметр к datetime.

str = string({'24-Oct-2016 11:58:17';
              '19-Nov-2016 09:36:29';
              '12-Dec-2016 10:09:06'})
str = 

  3×1 string array

    "24-Oct-2016 11:58:17"
    "19-Nov-2016 09:36:29"
    "12-Dec-2016 10:09:06"
t = datetime(str,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = 

  3×1 datetime array

   24-Oct-2016 11:58:17
   19-Nov-2016 09:36:29
   12-Dec-2016 10:09:06

Преобразуйте значение datetime в строку.

t = datetime('25-Dec-2016 06:12:34');
str = string(t)
str = 

     "25-Dec-2016 06:12:34"

Преобразование между векторами Datetime и даты

Вектор даты 1 6 вектор с двойной точностью чисел. Элементы вектора даты с целочисленным знаком, за исключением элемента секунд, который может быть дробным. Временные стоимости выражаются в 24-часовом обозначении. Нет никакой установки AM или PM.

Вектор даты располагается в следующем порядке:

year month day hour minute second

Следующий вектор даты представляет 10:45:07 24 октября 2012:

[2012  10  24  10  45  07]

Преобразуйте один или несколько векторов даты в массив datetime с помощью функции datetime:

t = datetime([2012  10  24  10  45  07])
t = 

  datetime

   24-Oct-2012 10:45:07

Вместо того, чтобы использовать datevec, чтобы извлечь компоненты значений datetime, используйте функции, такие как year, month и day вместо этого:

y = year(t)
y =

        2012

Также получите доступ к соответствующему свойству, такому как t.Year для значений года:

y = t.Year
y =

        2012

Преобразование последовательных чисел даты в Datetime

Последовательный номер даты представляет календарную дату как номер дней, который передал начиная с установленной основной даты. В MATLAB последовательная дата номер 1 1 января, 0000.

Последовательное время может представлять части дней, начинающихся в полночь; например, 6 p. m. равняется 0,75 последовательным дням. Так вектор символа '31-Oct-2003, 6:00 PM' в MATLAB является датой номер 731885.75.

Преобразуйте одно или несколько последовательных чисел даты в массив datetime с помощью функции datetime. Задайте тип номера даты, который преобразовывается:

t = datetime(731885.75,'ConvertFrom','datenum')
t = 

  datetime

   31-Oct-2003 18:00:00

Преобразование массивов datetime в числовые значения

Некоторые функции MATLAB принимают типы числовых данных, но не значения datetime как входные параметры. Чтобы применить эти функции к вашим данным даты и времени, преобразуйте значения datetime в значимые числовые значения. Затем вызовите функцию. Например, функция log принимает входные параметры double, но не входные параметры datetime. Предположим, что у вас есть массив datetime дат, охватывающих курс изыскания или эксперимента.

t = datetime(2014,6,18) + calmonths(1:4)
t = 

  1×4 datetime array

   18-Jul-2014   18-Aug-2014   18-Sep-2014   18-Oct-2014

Вычтите значение источника. Например, значение источника может быть стартовым днем эксперимента.

dt = t - datetime(2014,7,1)
dt = 

  1×4 duration array

    408:00:00   1152:00:00   1896:00:00   2616:00:00

dt является массивом duration. Преобразуйте dt в массив double значений в модулях лет, дней, часов, минут или секунд с помощью years, days, hours, minutes или функции seconds, соответственно.

x = hours(dt)
x =

         408        1152        1896        2616

Передайте массив double как входной параметр к функции log.

y = log(x)
y =

    6.0113    7.0493    7.5475    7.8694

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

| | | |

Похожие темы

Была ли эта тема полезной?