我有一个向量,其随机分布值从0到10递增,例如, [1 3 4 9 10]。如何将此向量转换为日期时间对象,时间值介于...十一月和十二月这些数字代表两者之间的相应时间?
例如,如果x = [1 2 3]并且我想要整个1月的时间段,则输出应该是[1月1日,1月15日,1月30日],根据它们的相对值。
例如,如果x = [0 0.5 9 10]并且我们有整个1月那么0应该映射到1月的第一天和10月到1月的最后一天。 0.5将映射到从1月1日到最后1月开始的部分0.5 / 10 = 1/20的日期。那个日期大约是30 * 1/20 = 1天半到1月份。现在,9将以同样的方式处于30天的9/10位置。那是30 * 9/10 = 27.这是1月27日。所以输出应该是[日期1月1日,1月1日,1月27日,1月30日]的日期时间格式。
答案 0 :(得分:0)
您可以使用datenum
和一些基本算法来得出以下解决方案:
formatIn = 'dd.mm.yyyy';
d1 = '01.01.2017'; % user input, should be the earlier date
d2 = '31.01.2017'; % user input, should be the later date
x = [0 0.5 5 7 10]; % user input
d1 = datenum(d1,formatIn);
d2 = datenum(d2,formatIn);
daysAfter_d1 = d2-d1;
x = x/max(x);
addDays = round(daysAfter_d1*x);
interpolatedDates = d1 + addDays;
datestr(interpolatedDates,formatIn)
ans =
01.01.2017
03.01.2017
16.01.2017
22.01.2017
31.01.2017