将UNIX时间戳转换为区域的本地时间?

时间:2019-12-16 08:10:12

标签: sql presto

如何将unix时间的字段转换为区域的本地时间?

Timestamp 
1507576891
1507582204
1508777161

我要选择转换为欧洲/柏林当地时间吗?

我正在尝试

Select cast(from_unixtime(time, Europe/Berlin) as date)

但是缺少一些东西,因为我希望结果像 2019-12-12 16:32:00

谢谢

3 个答案:

答案 0 :(得分:1)

合并from_unixtimeat_timezone

presto:default> SELECT at_timezone(from_unixtime(1507576891), 'Europe/Berlin');
                 _col0
---------------------------------------
 2017-10-09 21:21:31.000 Europe/Berlin

答案 1 :(得分:0)

您不必强制转换。使用convert_tz转换为您选择的时区。

Employee

答案 2 :(得分:0)

欧洲/柏林时区是格林尼治标准时间+1,因此您可以执行以下操作

select convert_tz(from_unixtime(1508777161), @@session.time_zone, '+01:00') as 'Europe/Berlin'
// 2017-10-23 17:46:01

更有用:

获取当前时间:

select convert_tz(now(), @@session.time_zone, '+01:00')
// 2019-12-16 09:33:36

并设置格式:

SELECT DATE_FORMAT( CONVERT_TZ( NOW( ) , @@session.time_zone , '+01:00' ) , '%b %d %Y %h:%i:%s %p' )
// Dec 16 2019 09:34:30 PM

要使用您当前的MySQL时间从时区(例如Indochina Time GMT + 7)获取时差:

select timediff(now(),convert_tz(now(), @@session.time_zone, '+07:00'));