Hi Rongrong,
        The event is really happens in Tuesday, January 22, 2019 9:03:02.001 
PM, so I think the first function returns 1548162182001 is correct. It is the 
Unix epoch time when the event happens.
        But why the timestamp passed into the from_unixtime is changed to 
1548190982001? If it is not changed, I can still format 1548162182001 then pass 
a time zone to get the actual date. 
        Timestamp is a time-zone independent value, it should not be changed, I 
think.

Best
Henry

> 在 2019年1月26日,下午1:21,Rong Rong <walter...@gmail.com> 写道:
> 
> Hi Henry,
> 
> Unix epoch time values are always under GMT timezone, for example:
> - 1548162182001 <=> GMT: Tuesday, January 22, 2019 1:03:02.001 PM, or CST: 
> Tuesday, January 22, 2019 9:03:02.001 PM.
> - 1548190982001 <=> GMT: Tuesday, January 22, 2019 9:03:02.001 PM, or CST: 
> Wednesday, January 23, 2019 4:03:02.001 AM.
> 
> several things are needed here 
> 1. your "unix_timestamp" UDF should return actual Unix epoch time [1].
> 2. as Bowen mentioned, you will have to pass in the desired timezone as 
> argument to your "from_unixtime" UDF.
> 
> --
> Rong
> 
> [1]: https://en.wikipedia.org/wiki/Unix_time 
> <https://en.wikipedia.org/wiki/Unix_time>
> On Thu, Jan 24, 2019 at 4:43 PM Bowen Li <bowenl...@gmail.com 
> <mailto:bowenl...@gmail.com>> wrote:
> Hi,
> 
> Did you consider timezone in conversion in your UDF?
> 
> 
> On Tue, Jan 22, 2019 at 5:29 AM 徐涛 <happydexu...@gmail.com 
> <mailto:happydexu...@gmail.com>> wrote:
> Hi Experts,
>       I have the following two UDFs,
>         unix_timestamp:   transform from string to Timestamp, with the 
> arguments (value:String, format:String), return Timestamp
>        from_unixtime:    transform from Timestamp to String, with the 
> arguments (ts:Long, format:String), return String
> 
> 
>       select 
>          number,
>          ts,
>          from_unixtime(unix_timestamp(LAST_UPDATE_TIME, 'EEE MMM dd HH:mm:Ss 
> z yyyy'),'yyyy-MM-dd')  as dt
>       from 
>          test;
> 
>      when the LAST_UPDATE_TIME value is "Tue Jan 22 21:03:12 CST 2019”, the 
> unix_timestamp return a Timestamp with value 1548162182001.
>       but when from_unixtime is invoked, the timestamp with value 
> 1548190982001 is passed in, there are 8 hours shift between them.
>       May I know why there are 8 hours shift between them, and how can I get 
> the timestamp that are passed out originally from the first UDF without 
> changing the code?
>       
>       Thanks very much.
> 
> Best
> Henry

Reply via email to