Указатель и преобразования даты

Форматы дат

Практически все финансовые данные получают из временных рядов, функции в 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 - январь 10000 года н.э. Financial Toolbox работает внутренне с серийными номерами дат (такими как, 730377). MATLAB также использует последовательное время, чтобы представлять доли дней, начинающихся в полночь. Для примера 18:00 равен 0.75 последовательные дни, так что 18:00 на 14-Sep-1999, в MATLAB - серийный номер даты 730377.75

Примечание

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

Многие функции Financial Toolbox, которые требуют дат в качестве входных параметров, принимают векторы символов даты, массивы datetime или серийные номера дат. Если вы имеете дело с несколькими датами на уровне командной строки MATLAB, векторы символов даты более удобны. Если вы используете функции Financial Toolbox на большом количестве дат, как при анализе больших портфелей или денежных потоков, эффективность улучшается, если вы используете массивы данных или серийные номера дат. Для получения дополнительной информации смотрите Представление дат и времени в 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 года в 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 функции принимают.

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

дневной-месячный час: минута: секунда

01-Mar-2000

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

03/01/00

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

Mar

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

M

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

3

номер месяца

03/01

месяц/день

1

день месяца

Wed

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

W

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

2000

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

99

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

Mar01

месяц год

15:45:17

час: минута: секунда

03:45:17 PM

час: минута: второй AM или PM

15:45

час: минута

03:45 PM

час: минута 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 функция определения конкретных дат на 2011 − 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 функция, которая содержит праздники и специальные нетрадиционные дни для Нью-Йоркской фондовой биржи с 1950 по 2030 год включительно. В сложение можно использовать nyseclosures оценить все известные или ожидаемые закрытия Нью-Йоркской фондовой биржи с 1 января 1885 года по 31 декабря 2050 года. nyseclosures возвращает вектор серийных номеров дат, соответствующих закрытию рынка между датами StartDate и EndDate, включительно.

В этом примере используйте holidays определить стандартные праздники в последней половине 2012 года.

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 определить следующий рабочий день в 2012 году после этих праздников.

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'

См. также

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

Похожие примеры

Подробнее о

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