楼主: 大国126
7738 6

[问答] unix时间戳与SAS系统标准时间的转换 [推广有奖]

  • 0关注
  • 1粉丝

本科生

21%

还不是VIP/贵宾

-

威望
0
论坛币
2722 个
通用积分
0
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
429 点
帖子
12
精华
0
在线时间
131 小时
注册时间
2014-5-27
最后登录
2024-3-8

50论坛币
unix系统的时间戳是一串数字如1409501714,转化为标准时间是20140901 12:15:14,现在我使用SAS读取mysql数据库,其中一个字段就是unix的时间戳,请问如何在sas中转为标准时间(如20140901 12:15:14)。

最佳答案

sniperhgy 查看完整内容

楼主你好,请试试我的代码:有一点,那个1409501714对应的时间貌似是2014Aug31 16:15:14 (UTC 0),我用多种语言试验都是这个结果(VBS, SAS, JavaScript 还有 Python)。 如果想得到楼主要求的2014Sep01 00:15:14(UTC 8),需要将dhms的第二个参数改成8,因为dhms默认是按照格林威治时间计算的,那个是标准时间UTC 0, 但是北京处于东八区,所以属于UTC 8,需要将dhms的第二个参数也就是小时的offset调整到8,这样就得到了楼主想要的 ...
关键词:Unix 标准时 SQL数据库 MySQL sql 数据库 mysql 如何
沙发
sniperhgy 发表于 2015-11-2 11:05:46 |只看作者 |坛友微信交流群
楼主你好,请试试我的代码:
  1. data sample;                                                                                                                           
  2.   input unix_dtime;
  3.   Sas_dtime2 = dhms('01jan1970'd,0,0, unix_dtime);
  4.   format SAS_dtime2 datetime20.;

  5.   datalines;
  6. 1409501714
  7. ;
  8. run;

  9. proc print
  10.   data = sample;
  11. run;
复制代码
有一点,那个1409501714对应的时间貌似是2014Aug31 16:15:14 (UTC 0),我用多种语言试验都是这个结果(VBS, SAS, JavaScript 还有 Python)。 如果想得到楼主要求的2014Sep01 00:15:14(UTC 8),需要将dhms的第二个参数改成8,因为dhms默认是按照格林威治时间计算的,那个是标准时间UTC 0, 但是北京处于东八区,所以属于UTC 8,需要将dhms的第二个参数也就是小时的offset调整到8,这样就得到了楼主想要的时间。
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
wps930720 + 1 + 1 + 1 精彩帖子
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
alison513688 发表于 2015-11-20 15:15:23 |只看作者 |坛友微信交流群
sniperhgy 发表于 2015-11-2 11:05
楼主你好,请试试我的代码:有一点,那个1409501714对应的时间貌似是2014Aug31 16:15:14 (UTC 0),我用多种 ...
你这个得到的是31AUG2014:16:15:14,这种格式啊,怎么得到20140831 16:15:14呢,求指教啊

使用道具

板凳
sniperhgy 发表于 2015-11-21 13:04:57 |只看作者 |坛友微信交流群
alison513688 发表于 2015-11-20 15:15
你这个得到的是31AUG2014:16:15:14,这种格式啊,怎么得到20140831 16:15:14呢,求指教啊
指教不敢提,交流一下:请注意格式的设定。
先不给出答案,请先自己摸索一下啊,线索就是格式的设定。

使用道具

报纸
lgpax 发表于 2016-2-16 15:25:28 |只看作者 |坛友微信交流群
http://support.sas.com/documentation/cdl/en/hostunx/67929/HTML/default/viewer.htm#n1klm4vi8lx0qsn1v4r7g375uolc.htm
SAS文档里提到了Unix时间和SAS时间的转换
我使用了这里的代码,但是仍然有点问题,如楼上所说,时区差了8个小时,而且比真正的时间还少了24小时。在+10年的基础上,再加32个小时就好了。


例如:1453703880,在Unix且北京时区下,应该是2016年1月25日14:38。
data _null_;
        unix_dt = 1453703880;
        format unix_dt datetime20.;
        put unix_dt; *结果显示24JAN2006:06:38:00;
run;

使用下面的代码进行转换。
data _null_;
        unix_dt = 1453703880;
        sas_dt = intnx('DThour', intnx('DTyear', unix_dt, 10, 's'), 32, 's'); *使用了两次intnx函数,分别增加10年和32小时;
        format sas_dt datetime20.;
        put sas_dt; *结果显示25JAN2016:14:38:00;
run;

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
听絮 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

地板
听絮 发表于 2017-7-28 11:14:33 |只看作者 |坛友微信交流群
lgpax 发表于 2016-2-16 15:25
http://support.sas.com/documentation/cdl/en/hostunx/67929/HTML/default/viewer.htm#n1klm4vi8lx0qsn1v4 ...
应该是多8个小时就行?

使用道具

7
wodematlab 发表于 2018-5-7 20:23:13 |只看作者 |坛友微信交流群
如果是13位带有毫秒的Unix时间如何进行操作呢?????

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 18:37