#matlab #date
#matlab #Дата
Вопрос:
Я использую dtstr2dtnummx, потому что это быстрее, но я столкнулся с проблемой, эта функция генерирует другое число данных, или, возможно, мой формат даты неверен
дата = {‘2011-03-13 23:59:59.100’}
out1 =число данных (дата)
out2=dtstr2dtnummx (дата, ‘гггг-мм-дд ЧЧ: ММ:SS.SSS’)
и выходные данные являются:
дата =
'2011-03-13 23:59:59.100'
out1 =
734575.999989583
out2 =
736281.960423495
Я не знаю, где ошибка
Обновить
Я нашел ответ, со следующим dateformat я получаю тот же результат
dtstr2dtnummx (дата, ‘ГГГГ-ММ-дд ЧЧ: мм:ss.SSS’)
Но я не знаю, почему так, потому что я следовал этому руководству, но я получаю неверный вывод, если кто-нибудь знает ответ, пожалуйста, поделитесь им.
Ответ №1:
datenum
и dtstr2dtnummx
используйте разные строки формата: datenum
вызовы cnv2icudf
для преобразования «токенов формата даты в токены формата даты ICU» (см. help cnv2icudf
), которые можно использовать с dtstr2dtnummx
. Обратите внимание, что это включает в себя замену верхнего и нижнего регистра на ММ (замена месяца и минут). Другими словами, вы использовали документацию для datenum
для создания строки формата для dtstr2dtnummx
, которая является недокументированной и частной.
Чтобы получить правильную строку формата для использования, вы можете вызвать
cnv2icudf('yyyy-mm-dd HH:MM:SS.FFF')
в результате
ans =
гггг-ММ-дд ЧЧ:мм:ss.SSS
что довольно близко к решению, которое вы нашли сами.
Усвоенный урок: есть причина, по которой dtstr2dtnummx
это частная функция — не вызывайте ее, пока не поймете оболочку datenum
;-).
Кстати, из любопытства: вы действительно профилировали свой код и обнаружили datenum
, что он является основным виновником?
Комментарии:
1. Обратите внимание, что ваша исходная строка формата ‘гггг-мм-дд ЧЧ: ММ:SS.SSS’ представляет собой смесь обоих форматов — миллисекунды для
datenum
являются ‘FFF’, в то время как для частной функции они являются ‘SSS’2. Возможно, мне следует упомянуть, что для того, чтобы вообще иметь возможность вызывать эти частные функции, я скопировал их из
C:Program FilesMATLABR2010btoolboxmatlabtimefunprivatecnv2icudf.m
в свой рабочий каталог…3. Да, я скопировал туда dtstr2dtnummx в 🙂
4. Я протестировал время выполнения и 1000 разговоров, которые занимают от 3,5 с до 4 с, а с dtstr2dtnummx это занимает всего 0,8 с, так что это действительно большая оптимизация 🙂 потому что у меня действительно большая база данных (измерения), 100 миллионов строк, поэтому в этом случае она учитывает время