我正在尝试将如下所示的日期时间转换为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')
,但这似乎也不起作用。我在做什么错了?
答案 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