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

如何将MM/DD/YYYY HH:MM:SS AM/PM转换为ISO日期格式YYYY-MM-DDThh:mm:ssZ

解决MM/DD/YYYY HH:MM:SS AM/PM转ISO标准日期格式的问题

别担心,这个日期格式转换其实只要把函数参数和时区处理对就搞定了!你之前用unix_timestamp没成功,大概率是格式模板或者时区转换没做对,我给你分场景讲清楚:

场景1:Spark SQL环境

Spark的日期函数比较直观,咱们分三步来:

  1. 用to_timestamp解析原字符串,指定匹配的格式模板
  2. 转成UTC时区(因为ISO格式的Z代表UTC时间)
  3. 用date_format输出标准ISO格式

示例代码:

SELECT 
  date_format(
    to_utc_timestamp(
      to_timestamp('01/23/2020 11:37:23 PM', 'MM/dd/yyyy hh:mm:ss a'), 
      'UTC'
    ), 
    'yyyy-MM-dd''T''HH:mm:ss''Z'''
  ) AS iso_utc_date;

关键细节:

  • 格式模板里的MM是月份(别写成mm,那是分钟),hh是12小时制,a用来匹配AM/PM标识
  • to_utc_timestamp负责把原时间转成UTC,确保输出的Z符合标准
  • 格式化时用单引号包裹T和Z,避免被解析为格式占位符

执行后,输入01/23/2020 11:37:23 PM(假设原时间是美国东部时区)会输出2020-01-24T03:37:23Z,完全符合ISO标准。

场景2:Hive SQL环境

Hive的函数逻辑略有不同,你可以结合unix_timestamp和时区转换来实现:

-- 先确保时区设置正确,或者用convert_tz指定时区
SET hive.timezone=UTC;

SELECT 
  concat(
    from_unixtime(unix_timestamp('01/23/2020 11:37:23 PM', 'MM/dd/yyyy hh:mm:ss a'), 'yyyy-MM-dd'),
    'T',
    from_unixtime(unix_timestamp('01/23/2020 11:37:23 PM', 'MM/dd/yyyy hh:mm:ss a'), 'HH:mm:ss'),
    'Z'
  ) AS iso_utc_date;

如果原时间不是UTC时区,推荐用convert_tz明确转换:

SELECT 
  date_format(
    convert_tz(
      to_timestamp('01/23/2020 11:37:23 PM', 'MM/dd/yyyy hh:mm:ss a'),
      'America/New_York', -- 替换成你的原时间时区
      'UTC'
    ),
    'yyyy-MM-dd''T''HH:mm:ss''Z'''
  ) AS iso_utc_date;

常见坑点提醒

  • 千万别搞混MM(月份)和mm(分钟)、hh(12小时制)和HH(24小时制),这是最容易出错的地方
  • ISO格式的Z必须对应UTC时间,所以一定要做时区转换,不然结果会不符合标准
  • 大多数SQL日期函数对AM/PM的大小写不敏感,所以不用特意匹配大小写

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:27:55