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

Форматы даты

Фактически все финансовые данные выводят из временных рядов, функции в 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.

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

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

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

datedisp

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

datenum

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

datestr

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

datetime

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

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

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

x2mdate

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

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

Преобразуйте между массивами 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дничасыминуты, или 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'

Другой пример необходимости в определенных датах мог быть то, что ваша компания закрывает на Мартине Лютере Кинге День младший, который является третьим понедельником в январе. Можно использоватьnweekdate функция, чтобы определить те определенные даты 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'

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

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

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

Больше о

Внешние веб-сайты