如何在Presto中将Epoch Time转换为IST时区的可读日期时间
解决Presto中Epoch时间戳转IST时区时间的问题
问题出在你当前的查询只是将Epoch时间转换为了UTC时间,而IST(印度标准时间)是UTC+05:30,所以直接格式化UTC时间会比实际IST时间早5.5小时(也就是你看到的转换结果比实际需求的IST时间提前了5.5小时)。
修正步骤:
- 正确处理毫秒级Epoch时间:你的
startdatetime是13位的毫秒级时间戳,你之前取前10位转成秒是可行的,但更严谨的方式是直接除以1000.0转换为秒级时间戳,避免截断带来的误差。 - 转换时区到IST:使用Presto的
at time zone函数,将from_unixtime返回的UTC时间转换为IST时区(时区标识符用Asia/Kolkata,这是Presto认可的IST标准时区)。 - 格式化输出:再用
date_trunc和to_char处理成你需要的格式。
修正后的查询语句:
select to_char( date_trunc('hour', from_unixtime(CAST(startdatetime AS double)/1000) at time zone 'Asia/Kolkata'), 'dd-mm-yyyy hh24' ) as ist_formatted_datetime, startdatetime FROM rocmetricsolr limit 10;
如果你坚持用取前10位的方式,也可以这样写:
select to_char( date_trunc('hour', from_unixtime(CAST(substr(startdatetime, 1, 10) AS double)) at time zone 'Asia/Kolkata'), 'dd-mm-yyyy hh24' ) as ist_formatted_datetime, startdatetime FROM rocmetricsolr limit 10;
验证示例:
拿你例子里的1526905879116来说:
- 转成秒级是
1526905879.116,对应的UTC时间是2018-05-21 23:11:19 - 转换为IST时区后是
2018-05-22 04:41:19 date_trunc('hour')后就是2018-05-22 04,格式化后是22-05-2018 04,这才是正确的IST时间。
内容的提问来源于stack exchange,提问作者Rittick Kundu
相关产品推荐
相关产品推荐

