如何将 NSDateComponents 转换为 NSDate?

How to convert NSDateComponents to NSDate?

我有这个功能:

private func getCurrentDateComponent() -> NSDateComponents {
        let date = NSDate()
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitDay, fromDate: date)
        return components
    }

当我调用它并使用函数时 date

var d = this.getCurrentDateComponent().date

我不知道为什么变量d是nil...

我就是这样做的:

let allUnits = NSCalendarUnit(rawValue: UInt.max)
return UICalendar.currentCalendar().components(allUnits, fromDate: NSDate())

请注意,在Swift 2.0 中不再使用按位或运算符|,而是NSCalendarUnit 符合OptionSetType 格式:

let timeUnits : NSCalendarUnit = [.Hour, .Minute, .Second]

日期日期组件之间的转换总是需要日历。 你有两个选择(比较NSCalendar dateFromComponents: vs NSDateComponents date):

  • 为日期组件指定日历,即添加

    components.calendar = calendar
    

    到您的 getCurrentDateComponent() 方法。那么

    var d = getCurrentDateComponent().date
    

    按预期工作。 (没有为日期分配日历 组件,如您观察到的 date 属性 returns nil。)

  • 或者,调用日历方法进行转换:

    let d = NSCalendar.currentCalendar().dateFromComponents(getCurrentDateComponent())
    

使用前需要设置日历NSDateComponents,没有日历就没有日期

let components = calendar.components(.CalendarUnitHour | .CalendarUnitMinute | .CalendarUnitMonth | .CalendarUnitYear | .CalendarUnitDay, fromDate: date)
components.calendar = NSCalendar.currentCalendar();
return components

Swift 4 :

let date = NSCalendar.current.date(from: components) 

// components is your component name