我有一个 GMT 时区的日期时间值。如何将其转换为我当地的时区?
我希望有一个功能可以实现这一点。请注意,由于是夏季,我不能只添加或减去差异。
例如,该函数可以这样工作:
data _null_;
gmtdatetime="17SEP14:09:42:10"dt;
localdatetime=tz2local(gmtdatetime,"GMT");
run;
我尝试了一些格式和信息的组合,但没有成功:
data _null_;
gmtdatetime="17SEP14:09:42:10"dt;
a=put(gmtdatetime,E8601DZ20.0);*Converts the value to "2014-09-17T09:42:10Z" to indicate that it is GMT;
localdatetime=input(a,B8601DT.);*Reads the GMT value;
put localdatetime datetime.;*This still prints the value as the original GMT value...;
run;
谢谢,
斯蒂格
我创建了一个返回 GMT 偏移量的函数,但是当我编译它时,出现以下错误:
ERROR: Built-in SAS FUNCTION or SUBROUTINE already exists with name 'GMToff'.
事实证明,SAS 中有一个未记录的函数可以返回 GMT 偏移量,幸运的是我选择了相同的名称!Here http://support.sas.com/rnd/itech/doc9/dev_guide/stprocess/httphead.html是一些用法示例。
无论如何,它不会像我想要的那样返回特定时间的偏移量,仅返回当前时间的偏移量。
这是一个函数,可以在给定时区的情况下将日期时间转换为“本地”时间(仅支持 GMT,但根据需要添加其他时区应该很简单):
proc fcmp outlib = Apfmtlib.funksjoner.localtime;
function localtime(datetime,tz$);
if upcase(tz)="GMT" then do;
offset_normal=3600;
offset_summer=7200;
end;
localtime=datetime+offset_normal;
/*If datetime is between 1 AM the last Sunday of March and 1 AM the last Sunday of October it is "summertime" in central Europe:*/
if intnx('week',mdy(3,31,year(datepart(datetime))),0)*86400 + 3600 le datetime le intnx('week',mdy(10,31,year(datepart(datetime))),0)*86400 + 3600 then localtime=datetime+offset_summer;;
return(localtime);
endsub;
quit;
options cmplib = Apfmtlib.funksjoner;
/*Usage examples:*/
data _null_;
gmtdatetime="17SEP14:09:42:10"dt;
localdatetime=localtime(gmtdatetime,"GMT");
put localdatetime datetime.;
gmtdatetime="17DEC14:09:42:10"dt;
localdatetime=localtime(gmtdatetime,"GMT");
put localdatetime datetime.;
run;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)