[
https://issues.apache.org/jira/browse/HIVE-25559?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17532731#comment-17532731
]
zengxl commented on HIVE-25559:
-------------------------------
[~zabetak] These patches have been included in my code.This is due to different
time zones.Is the user set to UTC regardless of time zone in
GenericUDFToUnixTimeStamp class.I found that many classes set the time zone to
UTC by default,This causes time errors for users in non-UTC time zones.Instead
of setting UTC to a fixed time zone, get the user's time zone
> to_unix_timestamp udf result incorrect
> --------------------------------------
>
> Key: HIVE-25559
> URL: https://issues.apache.org/jira/browse/HIVE-25559
> Project: Hive
> Issue Type: Bug
> Components: UDF
> Affects Versions: 3.1.2
> Reporter: zengxl
> Assignee: zengxl
> Priority: Critical
> Attachments: HIVE-25559.1.branch-3.1.2patch
>
>
> when I use *unix_timestamp* udf,What this function actually calls is
> *to_unix_timestamp* udf.This return result is incorrect.Here is my SQL:
> {code:java}
> //代码占位符
> SLF4J: Class path contains multiple SLF4J bindings.
> SLF4J: Found binding in
> [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in
> [jar:file:/usr/local/hive/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: Found binding in
> [jar:file:/usr/local/hadoop-3.2.1/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
> SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an
> explanation.
> SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
> Hive Session ID = 3a04a9cf-1fdb-4017-a4bb-14763a3163c7Logging initialized
> using configuration in file:/usr/local/hive/conf/hive-log4j2.properties
> Async: true
> Hive Session ID = 92ca916b-cfde-43b5-bd86-10d50ff7d861
> Hive-on-MR is deprecated in Hive 2 and may not be available in the future
> versions. Consider using a different execution engine (i.e. spark, tez) or
> using Hive 1.X releases.
> hive> select unix_timestamp('2021-09-24 00:00:00');
> OK
> 1632441600
> Time taken: 3.729 seconds, Fetched: 1 row(s)
> {code}
> We see GenericUDFToUnixTimeStamp class code,I found that the fixed time zone
> is set {color:#de350b}UTC{color}, not according to the user time zone.Time
> zones vary with users,My time zone is {color:#de350b}Asia/Shanghai{color}
> .Therefore, the function should use the user time zone Here is the code I
> modified
> {code:java}
> //代码占位符
> SessionState ss = SessionState.get(); String timeZoneStr =
> ss.getConf().get("hive.local.time.zone"); if (timeZoneStr == null ||
> timeZoneStr.trim().isEmpty() || timeZoneStr.toLowerCase().equals("local")) {
> timeZoneStr = System.getProperty("user.timezone"); }
> formatter.setTimeZone(TimeZone.getTimeZone(timeZoneStr));
> {code}
>
--
This message was sent by Atlassian Jira
(v8.20.7#820007)