配置单元将PHT时间转换为UTC

时间:2019-07-11 03:33:09

标签: time hive timezone hiveql

select to_utc_timestamp(current_timestamp(),'IST');

正在从utc转换为ist。 但是,

select to_utc_timestamp(current_timestamp(),'PHT');

PHT时间没有转换,它只是返回utc中的当前时间戳。

select current_timestamp(),to_utc_timestamp(current_timestamp(),'PHT');

| 2019-07-10 07:52:29.795  | 2019-07-10 07:52:29.795  |

仅返回utc

3 个答案:

答案 0 :(得分:2)

您需要指定国家的大洲/首都

select to_utc_timestamp(current_timestamp(),'Asia/Manila');

答案 1 :(得分:0)

无法识别

'PHT'时区,因为java.time.ZoneId不包含这样的区域,尽管它包含IST。使用这样的GMT偏移量表示法:

hive> select current_timestamp(),to_utc_timestamp(current_timestamp(),'GMT+8:00');
OK
2019-07-10 23:21:24.743 2019-07-10 15:21:24.743
Time taken: 0.096 seconds, Fetched: 1 row(s)

我不确定是菲律宾语中的GMT+8:00还是GMT-8:00,您应该更好地了解,如果您指定正确的GMT偏移量,to_utc_timestamp()将可以正常工作。而且在Manilla中没有夏令时,因此此方法应该可以正常工作。

亚洲/马尼拉也可以正常工作,就像@ F.Lazarescu提到的那样,最好使用时区标识符代替GMT偏移,因为如果适用的话,将计算夏令时:

select current_timestamp(),to_utc_timestamp(current_timestamp(),'Asia/Manila');
OK
2019-07-11 23:09:47.257 2019-07-11 15:09:47.257
Time taken: 4.029 seconds, Fetched: 1 row(s)

也请看这篇相当有用的文章:Watch out for timezones with Sqoop, Hive, Impala and Spark

答案 2 :(得分:0)

请勿使用时区缩写作为标识符。 IST可以是India Standard TimeIsrael Standard TimeIreland Standard Time。 (还有许多其他歧义。)

  • 如果到IST的意思是印度,请使用'Asia/Kolkata'
  • 如果用IST来表示以色列,则使用'Asia/Jerusalem'
  • 如果到IST时您表示不信任,请使用'Europe/Dublin'
  • 在菲律宾使用PHT代替'Asia/Manila'

有关完整列表,请参见Wikipedia上的list of tz database time zones