在Matlab 2016a中,我有一个周数的向量:
weekNum = [20 21 22 23];
有没有办法在周日从周日开始将周数转换为各自的日期?
答案 0 :(得分:6)
您可以使用days
和weekday
功能执行此操作。从一年的第一天开始,您可以减去天数以查找上一个星期日(如果它不是星期天),然后将您的向量weekNum
乘以7,为每个所需的日期添加偏移量周:
weekNum = [20 21 22 23];
t = datetime(2018, 1, 1, 'Format', 'dd-MMMM-yyyy'); % First day of the year
t = t - days(weekday(t)-1) + days((weekNum-1).*7);
这会为您提供以下星期日日期时间数组:
t =
1×4 datetime array
13-May-2018 20-May-2018 27-May-2018 03-June-2018
您可以使用week
确认其有效:
>> week(t)
ans =
20 21 22 23 % Same as weekNum
注意:第一周通常定义为包含1月1日的一周,并且可以包括上一年的天数。这意味着您可能会在2017年的第1周的星期日结束日期。
答案 1 :(得分:2)
% 1st day of year
D = datetime(2018,1,1);
% datetime objects representing the Sunday of the specified weeks
Dt = D + (20:23)*7-7-(weekday(D)-1);
这假定第1周被定义为2018年至少有一天的第一周。如果使用不同的定义,请相应地调整索引。
答案 2 :(得分:1)
我喜欢Matlab的是,有时你可以将计算任务委托给底层的Java框架,如果你知道的话:
year = 2018;
week = [20 21 22 23];
dow = 1;
sep = repmat('-',4,1);
chain = [repmat(num2str(year),4,1) sep num2str(week.','%d') sep repmat(num2str(dow),4,1)];
df = java.text.SimpleDateFormat('yyyy-w-u');
for i = 1:4
date = 719529 + (df.parse(chain(i,:)).getTime() / 1000 / 3600 / 24);
disp(datestr(date,'dd-mm-yyyy'));
end
输出:
13-05-2018
20-05-2018
27-05-2018
03-06-2018