Проблема с преобразованием строковой даты в переменную datetime в Matlab - PullRequest
0 голосов
/ 07 марта 2019

У меня есть переменная с именем FOUNDATION_DATE, которая включает следующие наблюдения дат в строковом формате:

'01/Jan/12'
''
''
''
'01/Jan/08'
''
'01/Jan/44'
''
''
'14/Oct/08'
''
''
'12/Jul/04'
'03/Aug/05'
'20/Apr/10'
'30/Dec/98'
'09/Apr/16'
'01/Jan/10'
'01/Dec/01'
'01/Jan/93'

Я использую функцию Matlab datetime для преобразования вышеуказанных наблюдений в тип данных datetime,Код:

datetime(FOUNDATION_DATE,'InputFormat','dd/MMM/yy')

, который дает следующие результаты:

01-Jan-2012
NaT
NaT
NaT
01-Jan-2008
NaT
01-Jan-2044
NaT
NaT
14-Oct-2008
NaT
NaT
12-Jul-2004
03-Aug-2005
20-Apr-2010
30-Dec-1998
09-Apr-2016
01-Jan-2010
01-Dec-2001
01-Jan-1993

Хотя в большинстве случаев преобразование проводится правильно, для наблюдения '01/Jan/44' это неслучай, когда год становится 2044.Эта проблема появляется во многих других наблюдениях за датами моей переменной (здесь представлена ​​только небольшая выборка), и довольно странно, что эта проблема появляется для наблюдений за датами за годы до 1969 года.

Есть ли у кого-нибудь решение для точногопреобразовать эти строки в datetime переменных?Любое объяснение также почему это происходит?

Ответы [ 2 ]

4 голосов
/ 07 марта 2019

Требуется опция 'PivotYear', которая определяет, к какому 100-летнему диапазону дат относится двузначная дата:

datetime( '01/Jan/44', 'inputformat', 'dd/MMM/yy', 'pivotyear', 1930 )

Таким образом, здесь 100-летний диапазон составляет 1930 - 2029

По умолчанию задокументировано (следовательно, не очень "странно"), это

year(datetime('now'))-50 % = 1969 at time of writing (2019)
1 голос
/ 07 марта 2019

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

startYear = year(datetime('now')) - 99;
datetime('01/Jan/69', 'InputFormat', 'dd/MMM/yy', 'PivotYear', startYear)

Это сделает любые даты в 2 цифры до сегодняшнего дня историческими.

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