将当前NSDate设置为8AM

时间:2015-01-11 20:57:04

标签: ios swift ios8

我看到了一些帖子,但它们似乎有点复杂,所以我想非常具体地说出我的问题,看看是否有一种相对简单的方法来实现这一目标。

我想在Swift for NSDate中创建一个名为changeTimeOfDay(hour:Int)的扩展方法,它将给定NSDate的时间更改为您传入的时间。

例如,如果我当前的NSDate变量d恰好是从现在开始的一周,我希望将该日期专门设置为早上8点(所以从现在开始的一周,早上8点我已经有一个可以在特定日期添加周数的扩展方法,以及一个可以增加小时数的扩展方法,但在这种情况下,我想将小时数实际设置为上午8点。

有关此方法的任何想法?我想支持ios7和8.我有点困惑(基于我迄今为止能够找到的内容),这是一种简单的方法。

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以创建一些扩展程序,以帮助您从NSDate对象中提取日期信息,并将其与所需的时间相结合,如下所示:

extension NSDate {
    var day:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,   fromDate: self).day   }
    var month: Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth, fromDate: self).month }
    var year:  Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,  fromDate: self).year  }
    var at8am: NSDate {
        return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: 8, minute: 0, second: 0, nanosecond: 0)!
    }
}


NSDate().at8am   // "Jan 11, 2015, 8:00 AM"

您的功能有一些问题。像这样使用它没有自我价值。你必须创建这个函数作为扩展NSDate函数来使用self。您应该将组件更改为新格式。这就是你应该如何实现你的功能:

extension NSDate {
    func changeHourOfDay(hour: Int) -> NSDate {
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitYear | .CalendarUnitDay | .CalendarUnitHour, fromDate: self)
        components.hour = hour
        return calendar.dateFromComponents(components)!
    }
}

NSDate().changeHourOfDay(8)  //  "Jan 11, 2015, 8:00 AM"

答案 1 :(得分:0)

func changeHourOfDay(hour: Int) -> NSDate {
        let calendar: NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
        let components: NSDateComponents = calendar.components(.YearCalendarUnit | .DayCalendarUnit | NSCalendarUnit.HourCalendarUnit, fromDate: self)
        components.hour = hour
        return calendar.dateFromComponents(components)!
    }

这是我最终按照上面的链接进行的操作。 这对你们好吗?

//那里有一些问题。像这样使用它没有自我价值。你必须创建这个函数作为扩展NSDate函数来使用self。您应该将组件更改为新格式。这就是你应该如何实现你的功能:

extension NSDate {
    func changeHourOfDay(hour: Int) -> NSDate {
        let calendar = NSCalendar.currentCalendar()
        let components = calendar.components(.CalendarUnitYear | .CalendarUnitDay | .CalendarUnitHour, fromDate: self)
        components.hour = hour
        return calendar.dateFromComponents(components)!
    }
}

NSDate().changeHourOfDay(8)  //  "Jan 11, 2015, 8:00 AM"