如何使用datenum将两个日期向量转换为MATLAB格式

时间:2016-05-17 14:51:28

标签: matlab

MATLAB的新手,我想采用两个向量yearmonth,并使用datenum()以matlab格式将它们放入一个date向量中。我已经尝试过从文档中做到这一点,但我还不太清楚如何去做。我所拥有的是:

date = datenum(year, month);

这给了我一个错误,如果有人可以提供帮助,那将非常感激。

2 个答案:

答案 0 :(得分:0)

datenum的输入应为stringcell-array,因此您可以执行以下操作:

year = [1989;1990];
month = [10;11];
input = cellstr(num2str([year,month]));
date = datenum (input,'yyyy   mm')

请注意,您需要为日期字符串编写正确的解析格式。

date =

  726742
  727138

formatOut = 'mmmm-dd-yyyy';
datestr(date,formatOut,'local')

ans = 

  October -01-1989
  November-01-1990

我认为您也可以在datenum中输入数字输入,但我不确定它是否接受向量 - 我在办公室有2010b版本但它不起作用。

答案 1 :(得分:0)

没有必要像@ gameofthrows的回答那样将数字转换为字符串和返回 - 这些都是非常昂贵的操作。您可以使用未记录的mex函数datenummx(如果您检查datenum源,可以发现它):

year = [1989;1990];
month = [10;11];

day = ones(size(year));
datenums = datenummx(year, month, day);

这提供了令人印象深刻的 ~86x 加速(Matlab 2013b),超过了此处提出的其他解决方案:

>> tic; for i=1:1e6, datenums = datenummx(year, month, ones(size(year))); end; toc;
Elapsed time is 3.286964 seconds.
>> tic; for i=1:1e6, input = cellstr(num2str([year,month])); datenums = datenum (input,'yyyy   mm'); end; toc;
Elapsed time is 283.356511 seconds.

这里可能应该有一个普遍的警告,即它可能会在未来的版本中突破,但这个功能已经存在了五年,并且性能优势显然超过了其他问题。