如何将 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
我有这个功能:
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
属性 returnsnil
。)或者,调用日历方法进行转换:
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