2015-06-02 3 views
2

При форматировании datetime, datestrings и datenums в MATLAB существуют два разных способа представления минут и месяцев либо как M, либо m или m и M соответственно. Конкретно, когда вы используете, когда используете datestr, это отличается от того, когда вы используете datetime. Вот пример,Несколько форматов даты в MATLAB

startdate='01/05/2015 12:35:22'; 
startdt=datetime(startdate,'InputFormat','dd/MM/yyyy HH:mm:ss'); 
startstr=datestr(startdt,'dd/mm/yyyy HH:MM:SS'); 

Посмотрите, как для СТРОКИ-ДАТУ мы используем строчные м за месяц и DateTime мы используем прописную M для месяца.

Почему MATLAB имеет разные форматы дат, применимые для этих команд? Каков наилучший подход для реализации согласованного стиля форматов даты в моем коде?

+0

Возможно, ISO 8601 - http://en.wikipedia.org/wiki/ISO_8601 или http://en.cppreference.com/w/cpp/chrono/c/strftference – doctorlove

+0

Ну, да, это жалоба, но моя Вопрос: «Почему они меняются за месяц в одной области на месяц в месяц?». Я продолжаю писать код для datestr, затем вставлю в паз и напишу тот же формат для datetime, и он сломает мой код. Думаю, если я пойму причину, почему это не остановит меня от этого. – josh

+0

@doctorlove Это на самом деле не поддерживает использование нижнего регистра в любом месте. Я предполагаю, что причина может быть неясной, если таковая есть. Однако это скорее кажется жалобой, чем вопросом программирования, поэтому я буду отмечать это как непонятное, что вы просите. – patrik

ответ

4

В R2014b MathWorks новый набор функциональных возможностей (на основе вокруг datetime класса) для обработки даты и времени, который предназначен для использования в качестве значительно улучшенной замены старых функций, таких как datestr, datenum и datevec.

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

Более старые функции, тем не менее, были сохранены для обратной совместимости. Возможно, что в некоторых будущих версиях MATLAB они могут постепенно постепенно прекращаться. Обычным процессом для этого было бы то, что для нескольких версий они поднимут (подавляемое) предупреждение, указывая, что вам может понадобиться изменить свой код, чтобы использовать более новые функции; а затем несколько версий позже они будут удалены (что, в конечном итоге, приведет к тому, что код все еще использует их для ошибки).

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

+0

Блестящий. Это точный ответ, который я искал. Спасибо. – josh

1

Это очень общий вопрос по Mathworks, и то, что многие программисты MATLAB жалуются:

Mathworks постоянно меняется общие вещи из одной версии в другую

Это, в частности, очень громоздки, когда, например, вам вдруг приходится иметь дело с чувствительным к регистру (произошло с 2007 по 2008 год, я думаю?), или когда у вас внезапно появились новые расцветки в ваших сюжетах, очень различная обработка ООП (первый ООП был кошмаром) и т. д.

На вопрос: обе функции, о которых вы говорите, в основном делают то же самое, но были представлены в самых разных версиях.

  • СТРОКА-ДАТЫ Перед 2006
  • даты и времени после 2014

Так что я Quess комментарий от doctorlove является правильным, Mathworks изменил это форматирование, чтобы быть более похожим на ISO-норм. Даже на сайте MathWorks вы можете найти очень небольшой комментарий

Примечание: Буква идентификаторы, даты и времени принимает отличаются от тех, которые используются в СТРОКЕ-ДАТЫ, datenum и datevec функций.