是否可以更改 NSDate 对象,以便结果等于 NSCalendar.startOfDayForDate(date:)
?该方法仅适用于 iOS 8 及更高版本,但我正在寻找适用于 iOS 7 的方法。
我研究了两种方法:
NSCalendar.dateFromComponents(comps:)
如下所述:NSDate beginning of day and end of day 。例如,像这样:class func startOfDay(date: NSDate, calendar: NSCalendar) -> NSDate { if #available(iOS 8, *) { return calendar.startOfDayForDate(date) } else { let dateComponents = calendar.components([.Year, .Month, .Day], fromDate: date) return calendar.dateFromComponents(dateComponents)! } }
NSDateFormatter.dateFromString(string:)
通过stringFromDate(date:)
,即将 NSDate 对象转换为不带时间的字符串,然后再转换回 NSDate 对象。
这两种方法的问题是它们返回一个可选的 NSDate。我不愿意隐式地解开它,并且我宁愿避免更改调用这些方法的方法的返回类型。
最佳答案
我认为 calendar.components()
方法返回一个可选值,因为理论上您可以输入不创建有效日期的组件,例如 2000-02-30。如果像您的情况一样,组件已经来自有效日期,那么我会毫不犹豫地隐式解开可选组件。
关于swift - NSCalendar.startOfDayForDate(日期 :) equivalent for iOS 7 with non-optional return type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37634297/