如何在BigQuery中将'1970-01-01T00:00Z'转为Timestamp并解决报错
BigQuery中UTC时间转IST时区日期的解决方案
错误原因
你遇到的Invalid timestamp: '1970-01-01T00:00Z'错误,是因为直接使用CAST将带Z(UTC时区标识)的ISO字符串转为TIMESTAMP类型时,BigQuery无法正确解析该格式。
正确转换方式
方式一:用TIMESTAMP函数解析UTC时间
先通过TIMESTAMP函数正确识别带时区标识的字符串,再转换为IST时区的日期:
SELECT DATE(TIMESTAMP('1970-01-01T00:00Z'), 'Asia/Kolkata') AS ist_date
执行后返回1970-01-01(UTC 00:00对应IST 05:30,日期未跨天)。
方式二:显式时区转换语法
使用AT TIME ZONE语法完成时区转换,逻辑更清晰:
SELECT DATE(TIMESTAMP '1970-01-01T00:00Z' AT TIME ZONE 'Asia/Kolkata') AS ist_date
方式三:精准解析格式(适配Java输出)
如果Java返回的是严格ISO-8601格式字符串,用PARSE_TIMESTAMP指定格式确保解析无误:
SELECT DATE(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%EZ', '1970-01-01T00:00Z'), 'Asia/Kolkata') AS ist_date
验证示例
若转换2024-05-20T23:00Z(UTC时间),以上方法都会返回2024-05-21(IST时间为次日04:30,日期跨天),符合预期。
内容的提问来源于stack exchange,提问作者Bhanupriya Sharma
相关产品推荐
相关产品推荐

