我正在处理一段操纵日期的代码。类DateFormatter
的实例在其上具有名为generateCalendarDates
的属性。这是一个布尔值我相信用于根据当前日历创建日期。但是,当我尝试在Xcode中分配或检查此属性时,我会从代码完成中收到该属性的描述。
它实际上告诉我不要使用这个属性。我想知道为什么会这样。因为我实际上在考虑使用它。
答案 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吗?