我必须确定H和H + 3,其中H> = =最接近的小时。
让我举几个例子:
如果今天的小时是0h00 - > H = 0h且H + 3 = 3h
如果今天的小时是0h01 - > H = 1h且H + 3 = 3h
如果今天的时间是21h00 - > H = 21h且H + 3 = 0h
如果今天的时间是22h34 - > H = 23h且H + 3 = 2h(第+ 1天)
我是Swift的新手,我知道如何在Obj C中获得最近的一小时,但是对于Swift,我不确定。
是否有快速方法可以确定这两个变量 H 和 H + 3 ,以便在任何给定时间设置两个标签的文本。
我尝试了这种方法,但它给了我最接近的小时但是最接近的小时,而不是> =。
func nextHourDate() -> NSDate? {
let calendar = NSCalendar.currentCalendar()
let date = NSDate()
let minuteComponent = calendar.components(NSCalendarUnit.Minute, fromDate: date)
let components = NSDateComponents()
components.minute = 60 - minuteComponent.minute
return calendar.dateByAddingComponents(components, toDate: date, options: [])
}
我在Swift 2.3中开发
编辑:
在阅读答案/评论之后,这就是我开发的内容。
func determineH() -> NSDate? {
let gregorian = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
let now = NSDate()
let components = gregorian.components([.Year, .Month, .Day, .Hour, .Minute, .Second], fromDate: now)
if components.minute != 0 {
components.hour = components.hour + 1
components.minute = 0
}
let date = gregorian.dateFromComponents(components)!
return date
}
答案 0 :(得分:2)
检查当前小时的分钟并返回上一个小时,然后再添加!?
我没有提供arithmetic masterpiece
的代码,因为你已经差不多了
只增加小时属性并将分钟重置为0!
comps.hours += 1
comps.minutes = 0
答案 1 :(得分:1)
要获得下一个小时,请添加1小时,然后删除分钟。如果您希望nextHour(中午12:00)为12:00 PM而不是下午1:00,则添加59分59秒而不是1小时。注意,这不会处理毫秒;如果你关心这一点,也要把它归零:
extension Date {
func advancedToNextHour() -> Date? {
var date = self
date += TimeInterval(59*60+59)
let calendar = Calendar.current
let components = calendar.dateComponents([.second, .minute], from: date)
guard let minutes = components.minute,
let seconds = components.second else {
return nil
}
return date - TimeInterval(minutes)*60 - TimeInterval(seconds)
}
func advancedToNearest(hours: Int) -> Date? {
guard let next = advancedToNextHour(), hours > 0 else {
return nil
}
return next + TimeInterval(hours-1)*60*60
}
}
print(Date().advancedToNextHour())
print(Date().advancedToNearest(hours: 3))