该文只适用于spark ,不同直连数据库DateFormatter不通用。详见:Spark日期函数及应用
今天是2020年12月28日,用时间宏取年月:{{}},返回的是20211228

产生原因
在SQL里,y 是Year(自然年), Y 表示的是Week year(年周年);
Week year 意思是当天所在的周属于的年份,一周从周日开始,周六结束,只要本周跨年,那么这周就算入下一年。
【举例】:2020-12-28 本周刚好跨年,且Week year是从上周日开始算的,那么昨天(2020年12月27日,周日)就刚好是跨年周的第一天,是属于2021年的第一周的,所以就出现了上面的情况。
解决方法
年份要用小写的y来写:

总结
在遇到时间格式化的最好就用小写的y
例如:
date_format(yyyy-MM-dd)
to_date(yyyy-MM-dd)
{{}}
date_format([日期],"YYYY-MM"),为什么2019年12月31号会被识别为“2020-12”?
产生原因
date_format的正确用法为date_format([日期],"yyyy-MM"),而不是大写的"YYYY",“YYYY”表示的是以周为周期的年,作为19年最后一天,实际被算作了20年的第一周。
解决方法
写成date_format([日期],"yyyy-MM"),就可以了:

注意
YYYY的问题,有两个地方会遇,一个是新建字段的表达式,一个是时间宏,要注意一下。
比如:{{}}不要写成{{}}。
使用to_date()函数转化日期时,发现对数对不上。函数写法:to_date([日期]),"yyyymmdd")
产生原因:
这里的小写的mm代表的是分钟,正确写法是大写的MM,应该写成:to_date([日期]),"yyyyMMdd")
