如何快速获取一个月的对象
Posted
技术标签:
【中文标题】如何快速获取一个月的对象【英文标题】:How to get objects for a month in swift 【发布时间】:2015-12-02 11:35:34 【问题描述】:我有一个数组,这个数组包含 Observation
类型元素,其中有一个 date
属性。
我只想根据月份和年份获取所有元素。
假设我的日期是 2015 年 1 月 11 日,所以我想从 observationList
中获取所有元素,这些元素有 11 个月和 2015 年。
示例代码如下,
class Observation
var date:NSDate = NSDate()
var value:String = ""
var observationList = [Observation]()
假设上面的observationList
有元素,那么我将如何获取所有元素,例如2015 年 11 月?
【问题讨论】:
为此使用NSDateComponents
。您需要一个 NSCalendar
的实例来从日期中获取日期组件。
【参考方案1】:
你可以过滤你的数组
var observations = [Observation]()
使用 filter
这样的方法
let calendar = NSCalendar.currentCalendar()
let filteredObservations = observations.filter (observation) -> Bool in
let components = calendar.components([.Month, .Year], fromDate:observation.date)
return components.month == 11 && components.year == 2015
【讨论】:
【参考方案2】:正如@dasdom 所指出的,您需要一个 NSCalendar 来获取 NSDate 的组件。
let calendar = NSCalendar.currentCalendar() // you can also ask for a specific calendar (e.g Gregorian)
let components = calendar.components([.Month, .Year], fromDate:date)
【讨论】:
【参考方案3】:创建一个扩展来获取你的日期组件:
extension NSDate
var month: Int
return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(.Month, fromDate: self)
var year: Int
return NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!.component(.Year, fromDate: self)
然后您可以轻松地过滤您的日期如下:
class Observation
var date = NSDate()
var value = String()
init(date: NSDate, value: String)
self.date = date
self.value = value
let ob1 = Observation(date: NSDate(), value: "Testing")
let observationList = [ob1]
let filteredList = observationList.filter() $0.date.year == 2015 && $0.date.month == 12
print(filteredList.first?.value ?? "") // Testing
【讨论】:
以上是关于如何快速获取一个月的对象的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 shell/perl 脚本获取一个月的第二个星期六? [关闭]