当前位置: 首页 > news >正文

【Flink SQL实战】 UTC 时区格式的 ISO 时间转东八区时间

文章目录

    • 一、原始数据格式
    • 二、解决方案
    • 三、其他要求

在实际开发中,我们常常会遇到此类情况:数据源里的时间格式是类似 2025-04-21T09:23:16.025Z 这种带 TimeZone 标识的 ISO 8601 格式,而我们需要在 Flink SQL 中将其转换成北京时间显示。

然而,基于 Flink 1.16.1 版本的限制,新版本支持的 AT TIME ZONEFROM_UTC_TIMESTAMP 函数都无法使用,但我们仍可以通过原始时间序列分解合成 + TO_TIMESTAMP_LTZ 的方式来完成。

 

一、原始数据格式

如下列数据表格,其中 creat_time 为一条 UTC 时区格式的 ISO 时间字符串:

2025-04-21T09:23:16.025Z需要转成北京时间:2025-04-21 17:23:16

将 UTC +0 转成为 Asia/Shanghai 时区 (+8)

 

二、解决方案

我们通过 Flink SQL 里带格式分解来处理:

-- 源数据
CREATE TEMPORARY VIEW source_table AS
SELECT * FROM (VALUES('2025-04-21T09:23:16.025Z'),('2025-04-21T09:24:25.339Z')
) AS t(creat_time);-- 转北京时间
CREATE TEMPORARY VIEW view1 AS SELECTcreat_time,TO_TIMESTAMP_LTZ(UNIX_TIMESTAMP(SUBSTRING(creat_time, 1, 19), 'yyyy-MM-dd''T''HH:mm:ss') * 1000+ CAST(SUBSTRING(creat_time, 21, 3) AS INT),3) AS local_time
FROM source_table;-- 转string
CREATE TEMPORARY VIEW view2 AS  SELECTcreat_time,DATE_FORMAT(TO_TIMESTAMP_LTZ(UNIX_TIMESTAMP(SUBSTRING(creat_time, 1, 19), 'yyyy-MM-dd''T''HH:mm:ss') * 1000+ CAST(SUBSTRING(creat_time, 21, 3) AS INT),3),'yyyy-MM-dd HH:mm:ss.SSS') AS local_time_str
FROM source_table;DESCRIBE view2;
  • SUBSTRING(creat_time, 1, 19) 提取 yyyy-MM-ddTHH:mm:ss
  • UNIX_TIMESTAMP(..., format) 转成秒级时戳
  • SUBSTRING(creat_time, 21, 3) 提取毫秒
  • TO_TIMESTAMP_LTZ(..., 3) 转为展示时区为北京时间的 timestamp

 

三、其他要求

确保 Flink SQL 环境里设置了下列配置:

SET table.local-time-zone = 'Asia/Shanghai';

这样 TO_TIMESTAMP_LTZ 输出才会是北京时间,而不是 UTC。

 

相关文章:

  • 深度学习3.5图像分类数据集
  • SQL 使用 UPDATE FROM 语法进行更新
  • vue2练习项目 家乡特色网站—前端静态网站模板
  • (7)NodeJS的使用与NPM包管理器
  • OpenCV基础函数学习4
  • 快手砍掉本地生活的门槛
  • 【ZYNQ MP开发】Linux下使用bootgen命令生成BOOT.bin报错架构不对问题探究
  • 科学养生指南:解锁健康生活新方式
  • 3200温控板电路解析
  • XMC4800 芯片深度解读:架构、特性、应用与开发指南
  • WebRTC通信技术EasyRTC音视频实时通话安全巡检搭建低延迟、高可靠的智能巡检新体系
  • 视频生成上下文并行方案
  • SQL 中 ROLLUP 的使用方法
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(三)
  • vue3 主题模式 结合 element-plus的主题
  • 《数据结构之美--双向链表》
  • Spring_MVC 高级特性详解与实战应用
  • Debian GNU/Linux的新手入门介绍
  • 【Spring】深入解析 Spring AOP 核心概念:切点、连接点、通知、切面、通知类型和使用 @PointCut 定义切点的方法
  • 安装Github软件详细流程,win10系统从配置git到安装软件详解,以及github软件整合包制作方法(
  • 云南巧家警方抓获一名网逃人员:带70余万现金“隐居”山洞,昼伏夜出
  • 商务部:服务业扩大开放试点任务多数来源于经营主体实际需要
  • 经济大省中川、豫、浙一季报已发:GDP增速均高于全国
  • 重大虚开发票偷税骗补案被查处:价税2.26亿,涉700余名主播
  • 花卉引流+商场促销,上海浦东用“花经济”带动“消费热”
  • 瑞士成第15届北影节主宾国,6部佳作闪耀“瑞士电影周”