Как получить datetime день, месяц и год без финансовых инструментов в Matlab? - PullRequest
0 голосов
/ 27 июня 2018

Я обнаружил, что такие функции, как day, month и year требуют Financial Toolbox.

>> [~, packages] = matlab.codetools.requiredFilesAndProducts('month'); packages(2)

ans = 

  struct with fields:

             Name: 'Financial Toolbox'
          Version: '5.8'
    ProductNumber: 30
          Certain: 1

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

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Я не думаю, что мои комментарии по вопросу или принятому решению встречаются так, как я намеревался, поэтому я дам правильный ответ, чтобы лучше уточнить то, что вы видите.

В MATLAB есть несколько вещей, называемых "месяцем". В Financial Toolbox есть функция с именем month (https://www.mathworks.com/help/finance/month.html).). Также есть метод класса datetime с именем "month" (https://www.mathworks.com/help/matlab/ref/month.html).. Это две отдельные функции, и они действуют как иначе. Обычная функция «месяц» (из Financial Toolbox) будет принимать любой номер даты или строку. Однако в MATLAB, если вы вызываете «месяц» и передаете ему экземпляр даты-времени (как в ответе принятого решения, вы можно использовать datetime('now')), вы не будете вызывать функцию Financial Toolbox «месяц», а будете использовать метод «месяц» класса datetime, потому что именно так работают правила диспетчеризации MATLAB.

matlab.codetools.requiredFilesAndProducts не знает и не может знать , что вы вызываете «месяц» с вводом даты и времени, поэтому он не может предполагать, что вы вызываете метод datetime с именем «месяц», и вместо этого выдает отчеты вам требования к функции Financial Toolbox.

Если вы знаете, что работаете с датами и временем, вы можете быть более точным в своем запросе к requiredFilesAndProducts:

>> [~,packages] = matlab.codetools.requiredFilesAndProducts(which('month(datetime(''now''))'))

packages = 

         Name: 'MATLAB'
      Version: '8.6'
ProductNumber: 1
      Certain: 1

Используя which('month(datetime(''now''))'), вы более точно указываете функции which, как именно будет выглядеть вызов вашей функции (т. Е. Каков будет ее тип ввода), что позволяет ей правильно определить, какой перегружен Будет вызван «month», а затем requiredFilesAndProducts может правильно показать вам, что если вы вводите дату и время, вам нужен только MATLAB, а не Financial Toolbox.

Если вам действительно нужно вызвать «месяц» в не-дата-время, вы можете эффективно получить то же поведение, написав свою собственную функцию, которая просто помещает серийную дату и формат в дату-время, а затем вызывает «месяц» в дату-время объект (см. синтаксис 'ConvertFrom' в https://www.mathworks.com/help/matlab/ref/datetime.html).. Это не будет иметь никаких требований к Financial Toolbox, потому что он будет использовать только метод datetime (который включен в базовый MATLAB).

0 голосов
/ 27 июня 2018

Вы можете использовать функцию datestr (набор инструментов не требуется).

Например, я буду использовать 'now', чтобы создать объект datetime, а затем обработать:

dt = datetime( 'now' );  % datetime object: 27-Jun-2018 12:17:27

% Year
y = datestr( dt, 'yyyy' ); % >> y = '2018'
% Month
m = datestr( dt, 'mm' );   % >> m = '06'
m = datestr( dt, 'mmm' );  % >> m = 'Jun'
% Day
d = datestr( dt, 'dd' );   % >> d = '27'
d = datestr( dt, 'ddd' );  % >> d = 'Wed'

Если вам нужно преобразовать числовые выходные данные года / месяца / дня в числа из массивов символов, используйте str2double.


Глядя, например, на month, вы можете видеть, что (после проверки надежности) он просто индексирует массив названий месяцев с выводом datevec, так что это был бы другой путь.


Редактировать

Я только что видел, что вы можете напрямую обращаться к свойствам year / month / day / ... объекта datetime. Это упрощает работу, особенно если вы хотите получить числовой вывод:

dt = datetime( 'now' ); % datetime object: 04-Mar-2019 11:20:00
y = dt.Year;  % >> y = 2019
m = dt.Month; % >> m = 3

Это по-прежнему позволяет избежать использования функций year / month / ....

...