java 中日期格式化的 YYYY 和 yyyy 易错记录

情况

  Date date=new Date("12/31/2021");
  SimpleDateFormat s=new SimpleDateFormat("YYYY-MM-dd");
  System.out.println(s.format(date));

"YYYY-MM-dd"这段格式化代码输出结果是

2022-12-31

SimpleDateFormat 的格式换成 "yyyy-MM-dd"则输出正确

2021-12-31

原因

StackOverflow 一个帖子说的很直白

@“YYYY” is week-based calendar year.
@“yyyy” is ordinary calendar year.

YYYY 是基于周的日历,也就是说如果当前周跨年,YYYY会把年份设为跨年后的年份,呈现的效果就是 年份+1
上面的例子中 2021年12月31号是周五,31号所在的这一周跨年了,所以最后输出是 2022,
如果是 2017年12月31号(这一天是周日) 用YYYY格式化 ,输出则是正常的 2017-12-31

yyyy就是我们平常理解的日历,所以平时对年的格式无脑用yyyy就行了

至于为什么YYYY是基于周,得去看 ISO 8601 这个标准了~

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值