You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Oracle/Java生成的长整型时间戳转换并存储到SAS表

解析Java毫秒时间戳到SAS日期时间并存储

要将Java getTime() 生成的毫秒时间戳(自1970-01-01 00:00:00 GMT起的毫秒数)转换为SAS可识别的日期时间并存储,可按以下步骤操作:

步骤1:读取CSV文件

将CSV中的时间戳作为数值型变量读取,使用best32.格式保证大整数的精度:

/* 替换为你的CSV文件实际路径 */
data work.raw_data;
    infile "/path/to/your/data.csv" dlm=',' firstobs=2; /* firstobs=2用于跳过表头行 */
    input timestamp_col : best32.; /* timestamp_col替换为CSV中时间戳对应的列名 */
run;

步骤2:转换时间戳为SAS日期时间

SAS的日期时间值以秒为单位,基准点是1960-01-01 00:00:00 GMT。需将Java的毫秒戳转为秒后,叠加1970-01-01对应的SAS基准时间:

data work.converted_data;
    set work.raw_data;
    /* 方法1:用DHMS函数生成1970-01-01的基准时间,加上转换后的秒数 */
    sas_datetime = dhms('01JAN1970'd, 0, 0, timestamp_col / 1000);
    
    /* 方法2:直接使用固定基准值(315619200是1970-01-01对应的SAS日期时间值) */
    /* sas_datetime = 315619200 + (timestamp_col / 1000); */
    
    /* 格式化日期时间,保留毫秒级精度 */
    format sas_datetime datetime22.3;
run;

步骤3:存储到SAS表

若需保存为永久SAS表,先指定库路径再输出:

/* 替换为你的SAS永久库路径 */
libname mylib "/path/to/your/sas/library";

data mylib.final_data;
    set work.converted_data;
run;

注意事项

  • 时区处理:如果需要确保转换后的时间为GMT,在转换前设置时区选项:
    options timezone='GMT';
    
    默认情况下SAS会使用会话的本地时区,可能导致显示时间存在偏移。
  • 数值精度:Java时间戳为13位整数,SAS的8字节数值型变量完全可以容纳,不会出现数据溢出问题。

内容的提问来源于stack exchange,提问作者Keliimek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:15:09