hive日历日到julian日期

vaj7vani  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(421)

我试图将标题中的日历日期转换为儒略日期,我在teradata中的做法是:

CAST((TO_CHAR(CURRENT_DATE-1,'J')) AS INT)

我尝试了以下方法:

from_unixtime(unix_timestamp(date_sub(to_date(from_unixtime(unix_timestamp())),1), 'yyyy-MM-dd'),'j')

但“j”不是Hive的有效模式。
谢谢。
编辑:我不是想得到yyyyddd格式的儒略日期,我是想得到2018年2月14日是2458164的儒略日期。
更多编辑:teradata中的这个函数输出儒略日,即公元前4713年12月31日以来的天数。

w8f9ii69

w8f9ii691#

@费尔南多;我用这个链接来计算:https://quasar.as.utexas.edu/billinfo/juliandatesg.html. 请注意,网站上写着(引用):
注意,这总是给你半天额外的时间。这是因为朱利安节从格林威治时间中午开始。这对天文学家来说很方便(他们直到最近才在夜间观测到),但却令人困惑。

SELECT 2-CAST(IF(MONTH(date_sub(current_date(),1))<=2, YEAR(date_sub(current_date(),1))-1,YEAR(date_sub(current_date(),1)))/100 AS INT)+CAST(CAST(IF(MONTH(date_sub(current_date(),1))<=2, YEAR(date_sub(current_date(),1))-1,YEAR(date_sub(current_date(),1)))/100 AS INT)/4 AS INT)+DAY(date_sub(current_date(),1))+CAST(365.25*(IF(MONTH(date_sub(current_date(),1))<=2,YEAR(date_sub(current_date(),1))-1, YEAR(date_sub(current_date(),1)))+4716) AS INT)+CAST(30.6001*(IF(MONTH(date_sub(current_date(),1))<=2, MONTH(date_sub(current_date(),1))+12, MONTH(date_sub(current_date(),1)))+1) AS INT)-1524.5;

当前日期减去一天:2018年2月13日结果:2458162.5
还有这个警告(再次引用网站):
警告:对于1582年之前的公历日期和负儒略日数字,不保证进行此计算。
==========上一个错误答案=======
@费尔南多,请使用date\子函数,格式为yyyyddd。希望这有帮助。谢谢。

Query: select from_unixtime(unix_timestamp(date_sub(current_date, 1),'yyyy-MM-dd'), 'yyyyDDD');

Result: 2018044

where Year: 2018 and J: 044
gpfsuwkq

gpfsuwkq2#

这个问题用密码解决了@âńōŋŷxmo公司ůŝ. 我只是做了一点修改,用from\u unixtime和unix\u timestamp来代替当前的\u日期。

ceiling(2
                    -CAST(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2, YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))-1,YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))/100 AS INT)
                    +CAST(CAST(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2, YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))-1,YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))/100 AS INT)/4 AS INT)
                    +DAY(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))
                    +CAST(365.25*(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2,YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))-1, YEAR(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))+4716) AS INT)
                    +CAST(30.6001*(IF(MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))<=2, MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd')))+12, MONTH(to_date(from_unixtime(unix_timestamp('04/04/2018','dd/MM/yyyy'),'yyyy-MM-dd'))))+1) AS INT)
                    -1524.5)

我还设置了一个上限函数来避免小数。

相关问题