如何在Matlab中没有财务工具箱的情况下获取日期,日期,月份和年份?

时间:2018-06-27 11:14:49

标签: matlab datetime financial

我发现daymonthyear之类的功能需要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 :(得分:3)

您可以使用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'

如果需要将年/月/日的数字输出转换为char数组中的数字,请使用str2double


例如,在month的背景下,您可以看到(在进行健壮性检查之后)它仅使用datevec的输出索引了一个月份名称数组,因此这将是另一个要走的路。


修改

我刚刚看到您可以直接访问datetime对象的year / month / day / ...属性。这使事情变得非常容易,尤其是在需要数字输出的情况下:

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

这仍然避免使用year / month / ...函数。

答案 1 :(得分:3)

我不认为我对问题或接受的解决方案的评论能达到我的预期目的,因此我将给出一个正确的答案,以更好地阐述您所看到的内容。

在MATLAB中有多个称为“月”的事物。财务工具箱(https://www.mathworks.com/help/finance/month.html)中有一个名为month的函数。 datetime类的一种方法也称为“ month”(https://www.mathworks.com/help/matlab/ref/month.html)。这是两个单独的功能,作用不同。 (财务工具箱的)常规“月”功能将接受任何日期数字或字符串。但是,在MATLAB中,如果您调用“ month”并将其传递给日期时间的一个实例(如接受的解决方案的答案,则可以使用datetime('now')),则不会调用Financial Toolbox的函数“ month”,而是datetime类的“月” 方法,因为这是MATLAB分配规则的工作方式。

matlab.codetools.requiredFilesAndProducts不会并且不能知道您正在使用日期时间输入调用“月”,因此不能假定您正在调用名为“月”的日期时间方法而是向您报告“财务工具箱”功能的要求。

如果知道您正在使用日期时间,则可以在查询中更精确地查询requiredFilesAndProducts:

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

packages = 

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

通过使用which('month(datetime(''now''))'),可以更准确地告诉which函数您的函数调用看起来是什么样(即,其输入类型是什么),从而使其能够正确运行确定哪个超载的“月”将被调用,然后requiredFilesAndProducts可以正确地向您显示,如果您输入的是日期时间,则只需要MATLAB,而不是Financial Toolbox。

如果您确实需要在非日期时间调用“月”,则可以通过编写自己的函数(将序列日期和格式放入日期时间,然后在日期时间调用“月”)来有效地获得相同的行为。对象(请参见https://www.mathworks.com/help/matlab/ref/datetime.html上的'ConvertFrom'语法)。这对Financial Toolbox没有任何要求,因为它将仅利用datetime方法(基本MATLAB中包含)。