hive 日期YYYY显示异常总结()

总结下hive y 和 Y 的区别

y/Y Meaning 解释
y year-of-era 元年,我们平时理解的年;20221231认为是2022年
Y week-based-year 基于周的年,只要日期那周跨年,都算下一年;2020-12-27周日,这周跨年,认为是2021年

问题记录

做数据验证发现数据异常;在执行以下hql在年底的时候会多加一年:

> select date_format('2020-12-31 00:00:00','YYYYMMddHHmmss'); 
20211231000000

使用不同日期反复排查验证,发现2020年底分界线是26号(周六,一周的结束);20201226之前的都能正常转换,20201227(周一,一周的开始)之后的都会多加1年;

> select date_format('2020-12-26 00:00:00','YYYYMMddHHmmss'); 
20201226000000
> select date_format('2020-12-27 00:00:00','YYYYMMddHHmmss'); 
20211227000000

查询hive文档得知YYYY(大写的Y)是基于周的年,指定日期的那周只要跨年了,就会算进下一年;
[https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF]

————————

总结下hive y 和 Y 的区别

y/Y Meaning 解释
y year-of-era 元年,我们平时理解的年;20221231认为是2022年
Y week-based-year 基于周的年,只要日期那周跨年,都算下一年;2020-12-27周日,这周跨年,认为是2021年

问题记录

做数据验证发现数据异常;在执行以下hql在年底的时候会多加一年:

> select date_format('2020-12-31 00:00:00','YYYYMMddHHmmss'); 
20211231000000

使用不同日期反复排查验证,发现2020年底分界线是26号(周六,一周的结束);20201226之前的都能正常转换,20201227(周一,一周的开始)之后的都会多加1年;

> select date_format('2020-12-26 00:00:00','YYYYMMddHHmmss'); 
20201226000000
> select date_format('2020-12-27 00:00:00','YYYYMMddHHmmss'); 
20211227000000

查询hive文档得知YYYY(大写的Y)是基于周的年,指定日期的那周只要跨年了,就会算进下一年;
[https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF]