为什么我不能使用 DateFormatter 属性 generateCalendarDates?

Why can't I use DateFormatter property generateCalendarDates?

我正在编写一段处理日期的代码。 class DateFormatter 的实例上有一个名为 generateCalendarDates 的 属性。我相信这是一个布尔值,用于根据当前日历创建日期。但是,当我尝试在 Xcode 中分配或检查此 属性 时,我从我的代码完成中收到了 属性 的描述。

居然告诉我不要用这个属性。我想知道这是为什么。因为我真的在考虑使用它。

generatesCalendarDates 属性 告诉 NSDateFormatter 在解析日期时创建 NSCalendarDate 而不是 NSDate 的实例。

它在 Swift 中不可用,因为 NSCalendarDate 已弃用,并且大多数弃用的 API 在 Swift 中不可用。

那么 NSCalendarDate 是什么?它是 NSDate 的子 class 添加了 timeZone 属性 并具有使用公历执行计算的方法。

为什么它被弃用了?因为 Apple 在 Mac OS X 10.4 (Tiger) 中引入了 NSCalendar class。您可以使用 NSCalendar 的实例来使用多种不同的日历(包括公历)执行计算。 NSCalendar 有它自己的 timeZone 属性,这是有意义的; NSDate 对象始终与时区无关。

DateFormatter 使用其 calendar 属性 解析(和格式化)日期。默认情况下,calendar 属性 设置为 Calendar.current,这是系统日历。用户可以在设置 > 通用 > 语言和地区 > 日历中选择系统日历。

如果需要,您可以将 calendar 属性 显式设置为公历:dateFormatter.calendar = Calendar(identifier: .gregorian)。但我不推荐它。如果用户选择了不同的日历,您确定要强制使用公历吗?