MATLAB从周数和年份获取日期

时间:2018-02-14 18:37:35

标签: matlab date

在Matlab 2016a中,我有一个周数的向量:

weekNum = [20 21 22 23];

有没有办法在周日从周日开始将周数转换为各自的日期?

3 个答案:

答案 0 :(得分:6)

您可以使用daysweekday功能执行此操作。从一年的第一天开始,您可以减去天数以查找上一个星期日(如果它不是星期天),然后将您的向量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