首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >夏令时转换

夏令时转换
EN

Stack Overflow用户
提问于 2021-06-28 22:06:07
回答 1查看 170关注 0票数 1

我正在尝试在我的程序中进行时区转换,但遇到了一些困难。下面是我的

代码语言:javascript
复制
data GMT_conv;
    set table;
    if city in ('Atlanta', 'Baltimore' , 'New York') then conv = -5;
    if city in ('Minneapolis') then conv = -6;
    if city in ('Salt Lake City') then conv = -7;
    if city in ('San Francisco') then conv = -8;
run;

然而,这只在夏季是正确的。夏令时在三月份的第二个星期天和十一月的第一个星期天有所不同。我想不出一个方法来做这件事if语句(在SAS或proc sql中)

我想要的:

代码语言:javascript
复制
if (between 2nd sunday in march and 1 sunday of november) 
       then conv +1;

有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-28 22:50:35

我的建议是使用SAS内置的时区函数和格式/信息,而不是使用您自己的。

首先,SAS's help page on time zones展示了如何使用时区指定时间。然后,您可以看到如何使用TZONES2U函数将see转换为UTC,或者使用TZONEU2S将其转换回UTC。这将自动处理夏令时!

例如:

代码语言:javascript
复制
data time_data;
format dtval datetime17.;
input city $ dtval :datetime17.;
datalines;
Atlanta 08JUN2021:11:00:00
Baltimore 08JAN2021:11:00:00
Chicago 08JUN2021:11:00:00
Dallas 08JAN2021:11:00:00
;;;;
run;

data want;
  set time_data;
  length tz $32;
  if city in ('Atlanta','Baltimore') then tz='America/New_York';
  if city in ('Chicago','Dallas') then tz='America/Chicago';
  
  format dtval_utc datetime17.;
  dtval_utc = tzones2u(dtval,tz);
  time_diff = dtval-dtval_utc;
  
  format time_diff time8.;
run;

这显示了DST的差异(注意亚特兰大在夏天是4个小时,而巴尔的摩在冬天是5个小时。)

当然,您仍然需要能够知道正确的时区是什么;您可以像最初那样手动完成,也可以在某种程度上进行查找(可能使用邮政编码和SASHELP.ZIPCODE)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68164805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档