在Matlab中如何在没有金融工具箱的情况下获取日期时间的日、月和年?

How to get datetime day, month and year without financial toolbox in Matlab?

我发现 daymonthyear 等函数需要 Financial Toolbox

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

ans = 

  struct with fields:

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

没有这个工具箱如何知道日期时间部分?

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

如果您需要将数字 year/month/day 输出转换为字符数组中的数字,请使用 str2double


例如,查看 month 的幕后,您可以看到(在稳健性检查之后)它只是用 datevec 的输出索引了一个月份名称数组,这样就可以了另辟蹊径。


编辑

我刚刚看到您可以直接访问 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/... 函数。

我认为我对问题的评论或已接受的解决方案没有按照我的预期方式得到传达,所以我会给出一个适当的答案以更好地阐述您所看到的内容。

MATLAB 中有多个叫做 "month" 的东西。在金融工具箱 (https://www.mathworks.com/help/finance/month.html). There is also a method of the datetime class called "month" (https://www.mathworks.com/help/matlab/ref/month.html) 中有一个名为 month 的函数。这是两个独立的功能,并且行为不同。常规 "month" 函数(金融工具箱的)将接受任何日期数字或字符串。但是,在 MATLAB 中,如果您调用 "month" 并将日期时间实例传递给它(如在已接受的解决方案的答案中,您可以使用 datetime('now')),您将不会调用金融工具箱的函数 "month",而是日期时间 class 的 "month" 方法 ,因为这就是 MATLAB 调度规则的工作方式。

matlab.codetools.requiredFilesAndProducts 不会也不能 知道 您正在使用日期时间输入调用 "month",因此它不能假设您正在调用datetime 方法调用 "month" 并向您报告 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——而不是金融工具箱。

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