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

时间:2017-05-18 19:38:54

标签: ios swift nsdateformatter

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

enter image description here

它实际上告诉我不要使用这个属性。我想知道为什么会这样。因为我实际上在考虑使用它。

1 个答案:

答案 0 :(得分:1)

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

Swift无法使用它,因为NSCalendarDate已弃用,大多数已弃用的API在Swift中不可用。

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

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

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

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