将日期格式转换为字符串

时间:2017-02-09 11:06:37

标签: sas

我有格式为DATETIME23.的列,如下所示:

14.02.2017 13:00:25

我希望将其转换为字符串,所以稍后,我可以对它进行现代化处理,例如,最终版本看起来像:

2017-02-14 13:00:25.000

问题发生,当我尝试将日期转换为char格式时:结果我有一个像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会破坏月份元素中的零

2 个答案:

答案 0 :(得分:1)

如果您的日期时间存储为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&#39;如果只是空格,只需在translate附近添加put()函数。

答案 1 :(得分:0)

对于dtms解决方案,您可以使用putZ2.格式在连接时保持前导零:

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

您应该只能使用put(date, datetime23.)来代替问题,而不是$23,它将秒数转换为长度为23的字符串。但是,正如评论中提到的那样datetime23. 1}}不是您示例中的格式。