解读阿里巴巴Java手册:为什么格式化时间是强制使用yyyy而不能使用YYYY

在这里插入图片描述
从手册上可以看出,使用YYYY一般情况下是没有问题的,只是在涉及到跨年的时候才会出现问问题,但这种问题往往也是致命的。

像礼拜几是一周的第一天问题一样,中国是把礼拜一作为一周的第一天,而美国把礼拜天作为一周的第一天。在哪一周是一年的第一周这个问题上也存在这种问题。

为了解决这个问题,国际标准化组织制订了国际标准ISO 8601是日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前最新为第三版ISO8601:2004,第一版为ISO8601:1988,第二版为ISO8601:2000。

第一个日历星期有以下四种等效说法:

  1. 本年度第一个星期四所在的星期;
  2. 1月4日所在的星期;
  3. 本年度第一个至少有4天在同一星期内的星期;
  4. 星期一在去年12月29日至今年1月4日以内的星期;.

在来看一下JDK是如何定义的

在这里插入图片描述
在规定中,y表示year,而Y表示Week Year!用代码来验证下:

public static void main(String[] args) throws ParseException{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat sdf1 = new SimpleDateFormat("YYYY-MM-dd");
        System.out.println("2019-12-01转换为"+sdf1.format(sdf.parse("2019-12-01")));
        System.out.println("2019-12-30转换为"+sdf1.format(sdf.parse("2019-12-30")));
        System.out.println("2020-01-01转换为"+sdf1.format(sdf.parse("2020-01-01")));
	}
2019-12-01转换为2019-12-01
2019-12-30转换为2020-12-30
2020-01-01转换为2020-01-01

可以看到使用YYYY转换的遇到跨年的一周时会出现问题(根据ISO 8601规则可能出现)
当我们要表示日期的时候,一定要使用 yyyy-MM-dd 而不是 YYYY-MM-dd

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦里藍天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值