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

Snowflake中如何将时间戳转换为毫秒级UNIX/Epoch格式

毫秒级Unix时间戳转换方案

完全可以实现,你之前拿到秒级结果,核心原因是时间解析阶段丢弃了字符串中的毫秒字段,或是计算时没有将毫秒值计入最终结果。毫秒级Epoch时间的计算逻辑非常明确:先计算目标时间到1970-01-01 00:00:00 UTC的总整秒数,乘以1000后加上字符串中携带的毫秒偏移值即可。

常用语言实现示例

  • Python
    不要直接使用仅返回秒级结果的time.mktime方法,通过datetime模块处理可保留毫秒精度:
    from datetime import datetime
    # 若原始时间为UTC时区,需为dt指定tzinfo=timezone.utc
    dt = datetime.strptime("2022-03-08 17:11:59.901", "%Y-%m-%d %H:%M:%S.%f")
    ms_ts = int(dt.timestamp() * 1000)
    # 对应你给出的示例时间,输出结果为1646730719901
    
  • JavaScript/Node.js
    原生Date对象的getTime()方法默认返回毫秒级时间戳,注意兼容非ISO格式的时间字符串即可:
    const timeStr = "2022-03-08 17:11:59.901";
    // 替换空格为T适配ISO 8601格式,避免低版本浏览器/Safari解析异常
    const date = new Date(timeStr.replace(' ', 'T'));
    const msTs = date.getTime();
    // 输出结果1646730719901
    
  • Java
    时间格式化规则中明确匹配毫秒字段即可,注意使用长整型存储结果:
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class TsConvert {
        public static void main(String[] args) throws Exception {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
            // 若为UTC时间需调用sdf.setTimeZone(TimeZone.getTimeZone("UTC"))
            Date date = sdf.parse("2022-03-08 17:11:59.901");
            long msTs = date.getTime();
        }
    }
    

常见踩坑点

  • 格式化匹配规则遗漏毫秒段:比如用%Y-%m-%d %H:%M:%S这类不带毫秒匹配符的规则解析时间串,会直接截断.901部分,最终只能得到秒级结果
  • 时区不匹配:原始时间的时区和解析代码默认时区不一致时,最终得到的时间戳会存在小时级的偏移误差
  • 数值类型溢出:毫秒级时间戳为13位数字,部分老运行环境用32位整型存储会出现溢出,需改用64位长整型存储结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 00:15:54