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

Обзор

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

  • Date String - вектор символов.

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

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

    Example:  7.3510e+005

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

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

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

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

Строка даты может быть вектором символов, состоящей из полей, относящихся к определенной дате и/или времени. Существует несколько способов представления дат и времени в текстовом формате. Для примера все следующие векторы символов представляют 23 августа 2010 года в 04: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 функции принимают.

Полный список спецификаторов формата даты и времени см. в Format свойство datetime тип данных.

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 = ["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 и Date

Вектор даты является вектором 1 на 6 с двойной точностью. Элементы массива вектора даты являются целочисленными, за исключением элемента seconds, который может быть дробным. Значения времени выражаются в 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.

Последовательное время может представлять доли дней, начинающихся в полночь; для примера 18:00 равен 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

См. также

| | | | | |

Похожие темы