Обработайте и преобразуйте даты

Форматы даты

Фактически все финансовые данные выводят от временных рядов, функции в Financial Toolbox™ имеют обширные обрабатывающие дату возможности. Тулбокс функционирует дата поддержки или форматы даты и времени как векторы символов, массивы datetime или последовательные числа даты.

  • character vectors даты является текстом, которые представляют дату и время, которую можно использовать с несколькими форматами. Например, 'dd-mmm-yyyy HH:MM:SS', 'dd-mmm-yyyy' и 'mm/dd/yyyy' являются всеми поддерживаемыми текстовыми форматами для вектора символов даты. Чаще всего вы работаете с векторами символов даты (такими как 14-Sep-1999) при контакте с датами.

  • Datetime arrays, созданное использование datetime, является лучшим типом данных для представления моментов времени. значения datetime имеют гибкие форматы отображения и до точности наносекунды и могут составлять часовые пояса, летнее время и секунды прыжка. Когда объекты datetime используются в качестве входных параметров к другим функциям Financial Toolbox, формат объекта входа datetime сохраняется. Например:

    originalDate = datetime('now','Format','yyyy-MM-dd HH:mm:ss'); 
      % Find the next business day 
      b = busdate(originalDate)
      b = 
      datetime
       2017-04-20 14:47:39

  • Serial date numbers представляет календарную дату как номер дней, которые передали начиная с установленной основной даты. В MATLAB последовательный номер даты 1 является январем 1,0000 нашей эры. Financial Toolbox работает внутренне с последовательными числами даты (такой как, 730377). MATLAB также использует последовательное время, чтобы представлять части дней, начинаясь в полночь. Например, 18:00 равняется 0.75 последовательные дни, таким образом, 18:00 на 14-Sep-1999, в MATLAB, является последовательным номером даты 730377.75

Примечание

Если вы задаете год 2D цифры, MATLAB принимает, что год находится в 100-летний период, сосредоточенный в текущий год. Смотрите функциональный datenum для определенной информации. MATLAB внутренняя обработка даты и вычисления не генерирует неоднозначных значений. Однако, когда это возможно, используйте последовательные числа даты или векторы символов даты, содержащие год из четырех знаков.

Много функций Financial Toolbox, которые требуют дат как входных параметров, принимают векторы символов даты, массивы datetime или последовательные числа даты. Если вы имеете дело с несколькими датами на уровне командной строки MATLAB, векторы символов даты более удобны. Если вы используете функции Financial Toolbox на больших количествах дат, когда в анализе больших портфелей или потоков наличности, производительность улучшается, если вы используете массивы datetime или последовательные числа даты. Для получения дополнительной информации, См. Представление дат и времени в MATLAB (MATLAB).

Преобразования даты

Financial Toolbox обеспечивает функции, которые преобразовывают векторы символов даты в или от последовательных чисел даты. Кроме того, можно преобразовать векторы символов или последовательные числа даты к массивам datetime.

Функции, которые преобразовывают между форматами даты:

datedisp

Отображает числовую матрицу с записями даты, отформатированными как векторы символов даты.

datenum

Преобразовывает вектор символов даты в последовательный номер даты.

datestr

Преобразовывает последовательный номер даты в вектор символов даты.

datetime

Преобразовывает от векторов символов даты или последовательных чисел даты, чтобы создать массив datetime.

datevecПреобразовывает последовательный номер даты или вектор символов даты к вектору даты, элементами которого является      [Year Month Day Hour Minute Second].
m2xdate

Преобразовывает MATLAB последовательный номер даты в Excel® последовательный номер даты.

x2mdate

Преобразовывает Microsoft® Excel последовательный номер даты в MATLAB последовательный номер даты.

Для получения дополнительной информации смотрите, Преобразовывают Между Массивами datetime, Числами и текстом (MATLAB).

Преобразуйте между массивами 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 = 

   23-Aug-2010 16:35:42

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

whos d t
    Name      Size            Bytes  Class       Attributes

  d         1x20               40  char                  
  t         1x1               121  datetime              

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

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

  datetime

   2016-12-11T125628
S = char(t);
filename = ['myTest_',S]
filename =

    'myTest_2016-12-11T125628'

Преобразуйте последовательные числа даты в массивы datetime

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

Введите преобразования с datenum

Функция datenum важна для использования программного обеспечения Financial Toolbox эффективно. datenum берет входной вектор символов даты в любом из нескольких форматов, с 'dd-mmm-yyyy', 'mm/dd/yyyy' или форматами 'dd-mmm-yyyy, hh:mm:ss.ss', являющимися наиболее распространенным. Входной вектор символов даты может иметь до шести полей, сформированных буквами и числами, разделенными любыми другими символами, такими что:

  • Дневное поле является целым числом от 1 до 31.

  • Поле месяца является или целым числом от 1 до 12 или вектором алфавитного символа по крайней мере с тремя символами.

  • Поле года является неотрицательным целым числом. Если только два числа заданы, то год принят, чтобы лечь в 100-летний период, сосредоточенный в текущий год. Если год не использован, текущий год является значением по умолчанию.

  • Часы, минуты и поля секунд являются дополнительными. Они - целые числа, разделенные двоеточиями или сопровождаемые 'am' или 'pm'.

Например, если текущий год 1999, то все эти даты эквивалентны:

'17-May-1999'
'17-May-99'
'17-may'
'May 17, 1999'
'5/17/99'
'5/17'

Кроме того, оба из этих форматов представляют то же время.

'17-May-1999, 18:30'
'5/17/99/6:30 pm'

Формат по умолчанию для входа только для чисел следует соглашению США. Поэтому 3/6 6 марта, не 3 июня.

С datenum можно преобразовать даты в последовательный формат даты, сохранить их в матричной переменной, и затем более поздней передаче переменная к функции. Также можно использовать datenum непосредственно в списке входных аргументов функции.

Например, рассмотрите функциональный bndprice, который вычисляет цену связи, учитывая доход до срока погашения. Сначала настройте переменные для дохода до срока погашения, купонной ставки и необходимых дат.

Yield       = 0.07;
CouponRate  = 0.08;
Settle      = datenum('17-May-2000');
Maturity    = datenum('01-Oct-2000');

Затем вызовите функцию с переменными.

bndprice(Yield,CouponRate,Settle,Maturity)
ans =

  100.3503

Также преобразуйте векторы символов даты в последовательные числа даты непосредственно в списке входных аргументов функции.

bndprice(0.07,0.08,datenum('17-May-2000'),... 
datenum('01-Oct-2000'))
ans =

  100.3503

bndprice является примером функции, разработанной, чтобы обнаружить присутствие векторов символов даты и сделать преобразование автоматически. Для функций как bndprice векторы символов даты могут быть переданы непосредственно.

bndprice(0.07,0.08,'17-May-2000','01-Oct-2000')
ans =

  100.3503

Решение представлять даты или как векторы символов даты или как последовательные числа даты часто является вопросом удобства. Например, при форматировании данных для отображения или для отладки обрабатывающего дату кода, можно просмотреть даты более легко как векторы символов даты, потому что последовательные числа даты трудно интерпретировать. Поочередно, последовательные числа даты являются только другим типом числовых данных, которые можно поместить в матрицу наряду с любыми другими числовыми данными для удобной манипуляции.

Помните, что, если вы создаете вектор входных векторов символов даты, используйте вектор-столбец и убедитесь, что все векторы символов являются той же длиной. Чтобы гарантировать, что векторы символов являются той же длиной, заполните векторы символов с пробелами или нулями. Для получения дополнительной информации смотрите Вход Вектора символов.

Выведите преобразования с datestr

Функция datestr преобразовывает последовательный номер даты в один из 19 различных выходных форматов вектора символов даты, показывающих дату, время или оба. Вывод по умолчанию для дат является вектором символов дневного года месяца, например, 24-Aug-2000. Функция datestr полезна для подготовки выходных отчетов.

Формат datestr

Описание

01-Mar-2000 15:45:17

дневной год месяца hour:minute:second

01-Mar-2000

дневной год месяца

03/01/00

месяц/день/год

Mar

месяц, три буквы

M

месяц, одна буква

3

номер месяца

03/01

месяц/день

1

день месяца

Wed

день недели, трех букв

W

день недели, одной буквы

2000

год, четыре числа

99

год, два числа

Mar01

год месяца

15:45:17

hour:minute:second

03:45:17 PM

hour:minute:second AM или PM

15:45

hour:minute

03:45 PM

hour:minute AM или PM

Q1-99

год календарного квартала

Q1

календарный квартал

Текущая дата и время

today и функции now возвращают последовательные числа даты для текущей даты и текущей даты и время, соответственно.

today
ans =

      736675
now
ans =

   7.3668e+05

Функция MATLAB date возвращает вектор символов для текущей даты.

date
ans =

    '11-Dec-2016'

Определение определенных дат

Financial Toolbox обеспечивает много функций для определения определенных дат. Например, примите, что вы планируете процедуру учета в течение прошлой пятницы каждого месяца. Используйте функцию lweekdate, чтобы возвратить те даты в течение года 2000. Входной параметр 6 задает в пятницу.

Fridates = lweekdate(6,2000,1:12);
Fridays = datestr(Fridates)
Fridays =

  12×11 char array

    '28-Jan-2000'
    '25-Feb-2000'
    '31-Mar-2000'
    '28-Apr-2000'
    '26-May-2000'
    '30-Jun-2000'
    '28-Jul-2000'
    '25-Aug-2000'
    '29-Sep-2000'
    '27-Oct-2000'
    '24-Nov-2000'
    '29-Dec-2000'

Другой пример необходимости в определенных датах мог быть то, что ваша компания закрывает на Мартине Лютере Кинге День младший, который является третьим понедельником в январе. Можно использовать функцию thenweekdate, чтобы определить те определенные даты 2 011 - 2014.

MLKDates = nweekdate(3,2,2011:2014,1);
MLKDays = datestr(MLKDates)
MLKDays =

  4×11 char array

    '17-Jan-2011'
    '16-Jan-2012'
    '21-Jan-2013'
    '20-Jan-2014'

Определение праздников

Составление праздников и другие неторговые дни важно, когда вы исследуете финансовые даты. Financial Toolbox обеспечивает функцию holidays, которая содержит праздники и специальные неторговые дни для Нью-Йоркской фондовой биржи от 1 950 до 2030, включительно. Кроме того, можно использовать nyseclosures, чтобы оценить все известные или ожидаемые закрытия Нью-Йоркской фондовой биржи с 1 января 1885 до 31 декабря 2050. nyseclosures возвращает вектор последовательных чисел даты, соответствующих закрытиям рынка между датами StartDate и EndDate, включительно.

В этом примере используйте holidays, чтобы определить стандартные праздники в последней половине из 2 012.

LHHDates = holidays('1-Jul-2012','31-Dec-2012');
LHHDays = datestr(LHHDates)
LHHDays =

  6×11 char array

    '04-Jul-2012'
    '03-Sep-2012'
    '29-Oct-2012'
    '30-Oct-2012'
    '22-Nov-2012'
    '25-Dec-2012'

Можно затем использовать функцию busdate, чтобы определить на следующий рабочий день в 2 012 после этих праздников.

LHNextDates = busdate(LHHDates);
LHNextDays = datestr(LHNextDates)
LHNextDays =

  6×11 char array

    '05-Jul-2012'
    '04-Sep-2012'
    '31-Oct-2012'
    '31-Oct-2012'
    '23-Nov-2012'
    '26-Dec-2012'

Определение дат потока наличности

Чтобы определить даты потока наличности ценных бумаг с регулярными платежами, используйте cfdates. Эта функция составляет купоны в год, основание дневного количества и правило конца месяца. Например, можно определить даты потока наличности безопасности, которая платит четыре купона в год в прошлый день месяца с помощью основания дневного количества actual/365. Для этого введите расчетный день, дату погашения и параметры для Period, Basis и EndMonthRule.

PayDates = cfdates('14-Mar-2000','30-Nov-2001',4,3,1);
PayDays = datestr(PayDates)
PayDays =

  7×11 char array

    '31-May-2000'
    '31-Aug-2000'
    '30-Nov-2000'
    '28-Feb-2001'
    '31-May-2001'
    '31-Aug-2001'
    '30-Nov-2001'

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

| | | | | | | | | | | | | |

Связанные примеры

Больше о