如何在Matlab中获取没有金融工具箱的日期时间,日期,月份和年份?

问题描述 投票:1回答:2

我发现像daymonthyear这样的函数需要Financial Toolbox

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

ans = 

  struct with fields:

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

如何在没有此工具箱的情况下了解日期时间部件?

matlab datetime financial
2个回答
3
投票

我不认为我对问题或已接受的解决方案的评论是按照我的意图进行的,所以我会给出一个正确的答案,以便更好地详细说明你所看到的内容。

在MATLAB中有多个称为“月”的东西。有一个名为month的函数,位于Financial Toolbox(https://www.mathworks.com/help/finance/month.html)中。还有一种称为“月”(datetime)的https://www.mathworks.com/help/matlab/ref/month.html类的方法。这是两个独立的功能,并采取不同的行动。 (金融工具箱)的常规“月”功能将接受任何日期编号或字符串。但是,在MATLAB中,如果你调用“月”并传递一个日期时间的实例(如在接受的解决方案的答案中,你可以使用datetime('now')),你将不会调用金融工具箱的函数“月”,而是“月份“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 - 而不是金融工具箱。

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


3
投票

您可以使用datestr功能(无需工具箱)。

举个例子,我现在将使用'now'创建日期时间对象,然后处理:

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的输出索引月份名称数组,这将是另一种方式。


编辑

我刚刚看到你可以直接访问日期时间对象的年/月/日/ ...属性。这使事情变得非常简单,特别是如果你想要数字输出:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.