为什么我不能使用 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)
。但我不推荐它。如果用户选择了不同的日历,您确定要强制使用公历吗?
我正在编写一段处理日期的代码。 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)
。但我不推荐它。如果用户选择了不同的日历,您确定要强制使用公历吗?