Работа со строками даты в разных форматах в Matlab - PullRequest
2 голосов
/ 19 февраля 2011

У меня очень длинный вектор строк даты (1000000+) в Matlab, который я хочу преобразовать в формат серийного номера. Проблема в том, что не каждая строка даты имеет одинаковый формат. Это один из двух форматов,

'2010-03-04 12: 00: 00,1'

или

'2010-03-04 12: 00: 00'

Проблема в том, что не все строки имеют точность в миллисекундах. Не существует регулярного шаблона относительно того, где происходят эти строки без миллисекунд. Данные первоначально считываются из файла данных, и строки в настоящее время существуют как массивы ячеек. Моя работа заключается в следующем:

for i=1:length(dates),
    if length(dates{i})==19
        dates(i)=datenum(temp);
    elseif length(dates{i})==21
        dates(i)=datenum(temp,'yyyy-mm-dd HH:MM:SS.FFF');
    end
end

Возможно, есть лучший способ сделать это? Важно, чтобы я сохранил точность в миллисекундах, когда она присутствует. Цель этого состоит в том, что мне придется извлекать и рассчитывать статистику по данным, связанным с каждым разом, на основе различных временных критериев, и я решил, что было бы проще, если бы даты обрабатывались как числа.

1 Ответ

3 голосов
/ 19 февраля 2011

В MATLAB R2010b я могу получить желаемый вывод при вызове DATENUM без дополнительных аргументов форматирования:

>> dateStrs = {'2010-03-04 12:00:00.1'; ...  %# Sample strings
               '2010-03-04 12:00:00'};
>> datenum(dateStrs)

ans =

  1.0e+005 *

    7.3420            %# The same? No, the Command Window just isn't displaying 
    7.3420            %#   many places after the decimal point.

>> format long        %# Let's make it show more decimal places
>> datenum(dateStrs)

ans =

  1.0e+005 *

   7.342015000011574  %# And there's the difference!
   7.342015000000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...