1. 问题
在对日期进行格式化时出现了如图的结果,使用 YYYY-MM-dd 格式时年份错误。
@Composable
private fun DataView() {
val format = SimpleDateFormat("YYYY-MM-dd")
val format1 = SimpleDateFormat("yyyy-MM-dd")
val calendar: Calendar = Calendar.getInstance()
calendar.set(2023, Calendar.DECEMBER, 31)
val date = calendar.time
Text(text = format.format(date))
Text(text = format1.format(date))
}
2. 原因
使用 YYYY-MM-dd
格式化时结果为 2024-12-31,出现了跨年成下一年 2024 年了。
这是因为日期格式化时,YYYY
表示(week-based-year)基于周的年份,每周仅属于某一年。如果一个日期处在一个跨年的周时,就会出现这种问题。
一周存在跨年问题时,判断它是属于上一年还是下一年,可以参考文档:A week is defined by
A week is defined by:
The first day-of-week. For example, the ISO-8601 standard considers Monday to be the first day-of-week.
The minimal number of days in the first week. For example, the ISO-8601 standard counts the first week as needing at least 4 days.
Together these two values allow a year or month to be divided into weeks.
因为上面的原因,格式化日期时应该使用 yyyy-MM-dd
(year-of-era) 。很多编程规范或手册也是这样要求的。