Matlab datenum генерация - PullRequest
0 голосов
/ 04 мая 2011

Я использую dtstr2dtnummx, потому что это быстрее, но я столкнулся с проблемой, эта функция генерирует другой datenum, или, возможно, мой формат даты неправильный

date = {'2011-03-13 23: 59: 59.100 '}

out1 = datenum (дата)

out2 = dtstr2dtnummx (дата,' гггг-мм-дд ЧЧ: ММ: СС.ССС ')

и выходы:

дата =

'2011-03-13 23:59:59.100'

out1 =

      734575.999989583

out2 =

      736281.960423495

Я не знаю, где ошибка

ОБНОВЛЕНИЕ

Я нашел ответ, со следующим форматом даты я получаю тот же результат

dtstr2dtnummx (дата, 'ГГГГ-ММ-дд ЧЧ: мм: сс.ССС')

Но я не знаю, почему так, потому что я следовал этот учебник, но я получаю неправильный вывод, если кто-нибудь знает ответ, пожалуйста, поделитесь им.

1 Ответ

4 голосов
/ 04 мая 2011

datenum и dtstr2dtnummx используют строки различного формата: datenum вызовы cnv2icudf для преобразования «токенов формата даты в токены формата даты ICU» (см. help cnv2icudf), которые можно использовать с dtstr2dtnummx.Обратите внимание, что это включает в себя смену прописных и строчных букв для ММ (чередуя месяц и минуты).Другими словами, вы использовали документацию для datenum для создания строки формата для dtstr2dtnummx, которая является недокументированной и частной.

Чтобы получить правильную строку формата для использования, вы можете вызвать

cnv2icudf('yyyy-mm-dd HH:MM:SS.FFF')

, в результате чего

ans =

гггг-мм-дд ЧЧ: мм: сс.ССС

, что довольно близко крешение, которое вы нашли сами.

Извлеченный урок: есть причина, по которой dtstr2dtnummx является закрытой функцией - не вызывайте ее, пока не поймете оболочку datenum; -).

Кстати, из любопытства: Вы действительно профилировали свой код и нашли datenum главным виновником?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...