2017-02-09 8 views
0

У меня есть колонки формата DATETIME23. так:Преобразовать формат даты для символьной строки

14.02.2017 13:00:25 

Я хочу чтобы CONVER его в строку, так позже, я смог бы его современность, так, например, окончательный вариант будет выглядеть так:

2017-02-14 13:00:25.000

Проблема встречается, когда я пытаюсь для преобразования даты в формат char: в результате у меня есть строка smth, например 1802700293 - это количество секунд.

Я пробовал:

format date $23.0

или

date = put(date, $23.0)

P.S Это ругой попробовать:

data a; 
format d date9.; 
d = '12jan2016'd; 
dtms = cat(day(d),'-',month(d),'-',year(d),' 00:00:00.000'); 

/* если нужно обязательно двухзначные день и месяц, то такой колхоз: */ 
if day(d) < 10 then dd=cat('0',put(day(d),$1.)); 
else ddday=put(day(d),$2.); 
if month(d) < 10 then mm=cat('0',put(month(d),$1.)); 
else mm=put(month(d),$2.); 
yyyy=put(year(d),$4.); 
/*dtms2 = cat(dd,'-',mm,'-',yyyy,' 00:00:00.000');*/ 
dtms2 = cat(dd,'-',mm,'-',yyyy,' 00:00:00.000'); 
dtms = cat(day(d),'-',month(d),'-',year(d),' 00:00:00.000'); 
run; 

НО, ненормально, то dtms2 CONCAT уничтожает ноль в месяц элемент

+1

дата и время23. формат «ddmmmyy: hh: mm: ss.ss», который отличается от вашего примера. Можете уточнить, пожалуйста. – Longfish

ответ

1

Если даты и времени хранится как DateTime SAS, просто используйте соответствующий формат:

 
data test ; 
    dt = '09feb2017:13:53:26'dt ; /* specify a datetime constant */ 
    new_dt = put(dt,E8601DT23.3) ; /* ISO datetime format */ 
run ; 

Выход

 
    dt    new_dt 

1802267606 2017-02-09T13:53:26.000 

Если вам нужно заменить 'T' с пространством, просто добавьте a translate функция вокруг put().

+0

Ницца, спасибо вам большое! –

0

Для вашего dtms решение, которое вы можете использовать put и формат Z2., чтобы сохранить лидирующие нули при конкатенации:

dtms = cat(day(d),'-', put(month(d),z2.),'-',year(d),' 00:00:00.000'); 

Вы должны просто использовать put(date, datetime23.) для своей проблемы, но вместо $23, которая преобразует количество секунд в строку длиной 23. Однако, как упоминалось в комментарии datetime23., это не формат вашего e Xample.