转换日期时间返回Null

时间:2019-09-04 15:05:29

标签: datetime hive hiveql

我正在尝试将如下所示的日期时间转换为EST:2017-09-19T07:00:00-07:00,但使用内置UTC转换的配置单元时,我一直得到Null值。

我尝试使用正则表达式解析日期:

date_format(from_unixtime(unix_timestamp(2017-09-19T07:00:00-07:00, "yyyy-MM-dd'T'HH:mm:ss") 
                - (cast(regexp_extract(regexp_extract(2017-09-19T07:00:00-07:00, '(-[0-9][0-9]:[0-9][0-9])$', 1),'(-[0-9][0-9])',1) as int)*3600) -18000),'YYYY-MM-dd HH:mm')

但这不好,因为根据一年中的时间会有每小时的差异。

我也尝试过:

FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(2017-09-19T07:00:00-07:00, "yyyy-MM-dd'T'hh:mm:ss:SSS'ZZZZZ'") * 1000, 'EST') 

FROM_UTC_TIMESTAMP(UNIX_TIMESTAMP(2017-09-19T07:00:00-07:00, "yyyy-MM-dd'T'hh:mm:ss:SSS'Z'") * 1000, 'EST')

,但这似乎也不起作用。我在做什么错了?

3 个答案:

答案 0 :(得分:0)

我认为该方法需要将日期作为这样的字符串:

date_format(from_unixtime(unix_timestamp('2017-09-19T07:00:00-07:00', "yyyy-MM-dd'T'HH:mm:ss")

通常,日期格式适用于字符串,而不适用于整数或数字。

答案 1 :(得分:0)

我通过结合两种运行查询的方式自己找到了答案。

date_format(
 FROM_UTC_TIMESTAMP(
  (unix_timestamp('2017-09-19T07:00:00-07:00', "yyyy-MM-dd'T'HH:mm:ss")
        + (cast(
              regexp_extract( 
                 regexp_extract('2017-09-19T07:00:00-07:00', '(-[0-9][0-9]:[0-9][0-9])$',1),'(-[0-9][0-9])',1) as int)
         *-3600)
             )*1000 ,'America/New York')
            ,'YYYY-MM-dd HH:mm:ss')

答案 2 :(得分:0)

您将得到NULL,因为您提供的模式(日期和时间的格式)与实际的日期时间值不匹配。更正查询中的日期时间格式可以解决此问题:

select from_unixtime(UNIX_TIMESTAMP("2017-09-19T07:00:00-07:00", "yyyy-MM-dd'T'HH:mm:ssXXX"), "yyyy-MM-dd HH:mm:ss");

查看此链接以了解有关日期时间模式的更多信息:https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html