我有关联日期的股票价格数据,存储在具有matlab格式的datenums的列向量中。
我经常需要在日期上进行循环或查找,到目前为止,我已经意识到使用了“外部簿记”,例如
for i = 1:length(dates)
thisDate = dates(i)
end
或更糟糕的
iDate = find(dates == thisDate, 1)
我通常必须做非常类似的操作,所以我想构建一个为我封装此功能的日期对象。通过使用公共属性(例如
)来完成此操作是微不足道的dates.datenum(i)
dates.datestr(i)
dates.findOneYearEarlier(i)
等
BUT
我需要能够直接访问向量以保持兼容性。
因此,直接访问我的dates-object需要产生有效的datenum。 例如:
dates(i) == 730910 % right now
dates.datenum(i) == 730910 % how I'm able to do it
我需要两个人同时工作。有没有办法在matlab中实现这个目标?
我提出了一些想法,但我不确定它们是多么富有成效:
而不是拥有一个管理所有日期的对象,每个对象只有一个日期,然后制作这些对象的向量。可能很慢,很难建立查找......
只需在任何需要的地方提取datenums矢量,并将其提供给旧代码。随着旧的东西不断得到更新,这使事情复杂化,而不是让它变得更容易。
以某种方式扩展了vector-class,但我完全不知道从哪里开始。
感谢您的想法!
答案 0 :(得分:2)
您可以直接继承double
:
classdef myDateContainer < double
methods
% Constructor
function this = myDataContainer(in)
if nargin<1 || isempty(in)
% default: zero
in = 0;
end
this = this@double(in);
end
% add datestring functionality
function str = datestring(this)
dbl = double(this); %# cast to double to get at the value
str = datestr(dbl); %# convert
end
end
end
使用:
date = myDateContainer(1:100);
date(3:5).datestring()