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

tech2024-05-15  71

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

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

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

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

本年度第一个星期四所在的星期;1月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)