日期格式中的"YYYY"和"yyyy"有什么不同

关于时间的显示可以说是我们做开发经常用到的知识点了,你肯定用过下边的代码: import Foundation let dateFormatter = DateFormatter() dateFormatter.dateFormat = "YYYY/MM/dd" 但我今天要告诉你,其中的 YYYY 这么使用其实是错的,如果我们想显示日期的年份,我们需要使用小写的 "yyyy"。 其中的 YYYY 这么使用其实是错的,如果我们想显示日期的年份,我们需要使用小写的 "yyyy"。 ``` yyyy:表示公历年的年数。这一天在哪一年就是哪一年,例如,2023-05-01 年就是 2023 YYYY:表示基于周的年份(Week-based year),它与 ISO 8601 标准一致。它表示的是这一周属于哪一年 ``` 在大部分情况下,这两个用法得到的是一致的,但是在年初和年末的那几天,有可能导致不同的结果,最终会产生一年的误差。 我们以 2024 年的最后一天 12 月 31 日举例,从日历中可以看出这一天是周二,这一周的后面几天都属于 2025 年了。 我们先用 yyyy 打印一下: ``` import Foundation let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" let date = dateFormatter.date(from: "2024-12-31") dateFormatter.dateFormat = "yyyy" print("公历年:") print("2024-12-31 -> \(dateFormatter.string(from: date))") // 2024-12-31 -> 2024 ``` 可以看到最终的打印结果为 2024-12-31 -> 2024,输出正确。 然后再用大写的 YYYY 打印一下: ``` import Foundation let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" let date = dateFormatter.date(from: "2024-12-31")! dateFormatter.dateFormat = "YYYY" print("基于周的年份:") print("2024-12-31 -> \(dateFormatter.string(from: date))") // 2024-12-31 -> 2025 ``` 可以看到控制台打出了 2024-12-31 -> 2025,错误的输出,因为 2024 年 12 月 30 号和 31 号被包含在了 2025 年的第一周里。 用 YYYY 还是 yyyy 取决于你是否真正理解大写 Y 和小写 y 在含义上的区别,以及你对程序的结果预期,如果你的日期展示需要显示公历年,需要使用小写 y。如果你需要显示以周为单位的年数,需要使用大写 Y(大部分都是前者)。
我的笔记