Need to subtract some hours from given timestamp in hive

Bhuvi007 picture Bhuvi007 · Nov 21, 2018 · Viewed 7.6k times · Source

Input: unix_timestamp('01/15/2018 15:26:37', 'mm/dd/YYYY hh:mm:ss')

Expected output is 4 hours delay from above utc input time i.e 01/15/2018 11:26:37

I know that there is date_sub function in hive but it is only used to subtract days from the given timestamp. But I need to know if there is a way by which I can subtract hours or minutes or seconds.

I have also tried something like below as EDT timezone is 4 hours behind UTC (but getting wrong output):

SELECT to_date(from_UTC_timestamp(unix_timestamp('01/15/2018 15:26:37', 'mm/dd/YYYY hh:mm:ss')*1000, 'EST6EDT')) as earliest_date; -- OUTPUT: 2017-12-31 (wrong) 

So can anyone help me out with this?

Answer

StrongYoung picture StrongYoung · Nov 21, 2018

It works fine.

select from_unixtime(unix_timestamp('01/15/2018 15:26:37', 'MM/dd/yyyy HH:mm:ss')-4*3600, 'MM/dd/yyyy HH:mm:ss')