От UTC до даты вектора - PullRequest
       33

От UTC до даты вектора

1 голос
/ 24 октября 2011

У меня есть набор дат, выраженный в форме 2010-07-31T23:01:57Z.Мне нужно преобразовать его в вектор.Я мог бы сделать это как datavec(mydate), он автоматически преобразует строку в вектор, но эта функция не принимает дату в формате UTC.Поэтому я грубо решил следующим образом:

a = `2010-07-31T23:01:57Z`; %UTC date format
a(20) = '';                 %remove Z
a(11) = ' ';                %replace T with a space 
a = datavec(a);             % [2010, 7, 31, 23, 1, 57]

Таким образом a является вектором даты, и я могу использовать etime(T1, T0) для вычисления разницы во времени между T1 и T0.Это уникальный способ или я могу сделать что-то стильное?

Ответы [ 3 ]

1 голос
/ 27 октября 2011

Как подсказывает Марк, все, что вам нужно сделать, это немного помочь MATLAB, указав формат данных.

datevec('2010-07-31T23:01:57Z','yyyy-mm-ddTHH:MM:SS')

должно сработать.

1 голос
/ 27 октября 2011

Как заявили другие, вы можете указать формат ожидаемых строк даты для таких функций, как DATEVEC и DATENUM . Пример:

%# set of dates and an initial date
T0 = '2010-01-01T00:00:00Z';
T = repmat({'2010-07-31T23:01:57Z'}, [10 1]);   %# cell array

%# format of datetime
frmt = 'yyyy-mm-ddTHH:MM:SS';

%# convert to serial date numbers, and compute difference between all T and T0
n = datenum(T,frmt);
n0 = datenum(T0,frmt);
tdiff = bsxfun(@minus, n, n0);

В качестве альтернативы, если у вас необычный формат даты, вы всегда можете разделить и проанализировать его самостоятельно с помощью таких функций, как TEXTSCAN :

vec = zeros(numel(T),6);
for i=1:numel(T)
    C = textscan(T{i}, '%f', 'Delimiter',['-' ':' 'T' 'Z']);
    vec(i,:) = C{1};
end
n = datenum(vec);

Обратите внимание, что в обоих случаях вы можете преобразовать обратно последовательное время в строки даты с помощью функции DATESTR .

1 голос
/ 24 октября 2011

используйте fieldSpecIn часть вызова datevec(). Прочтите все об этом здесь: http://www.mathworks.com/help/techdoc/matlab_prog/bspgcx2-1.html#bspgc4m-1

За исключением спецификации TZ в конце вашей строки, а также символов "и" и "s", ваш файл идентичен стандартному формату ISO 8601. Вы можете либо изменить свою, либо создать собственную строку спецификации.

Обратите внимание, что время Matlab не имеет понятия часового пояса. Вы должны следить за этим самостоятельно.

...