我有数据格式时间:十三时五十二分,十时三十分,十一时四十八分等等我想四舍五入到最接近的小时。比如13:52 -〉14:00,10:30 -〉11:00和11:48 -〉12:00。如何使用NSDate实现这一点?
3npbholx1#
下面是Swift 3.0的一个实现,它使用Date扩展来获取最接近的小时数:
Date
extension Date { func nearestHour() -> Date? { var components = NSCalendar.current.dateComponents([.minute], from: self) let minute = components.minute ?? 0 components.minute = minute >= 30 ? 60 - minute : -minute return Calendar.current.date(byAdding: components, to: self) } }
wbgh16ku2#
使用此方法
- (NSDate*) nextHourDate:(NSDate*)inDate{ NSCalendar *calendar = [NSCalendar currentCalendar]; NSDateComponents *comps = [calendar components: NSEraCalendarUnit|NSYearCalendarUnit| NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit fromDate: inDate]; [comps setHour: [comps hour]+1]; //NSDateComponents handles rolling over between days, months, years, etc return [calendar dateFromComponents:comps]; }
这将为您提供inDate的下一小时日期
ep6jt1vc3#
func nextHourDate() -> NSDate? { let calendar = NSCalendar.currentCalendar() let date = NSDate() var minuteComponent = calendar.components(NSCalendarUnit.MinuteCalendarUnit, fromDate: date) let components = NSDateComponents() components.minute = 60 - minuteComponent.minute return calendar.dateByAddingComponents(components, toDate: date, options: nil) }
oiopk7p54#
由于以下几个原因,使用组件并不可靠:1.不考虑秒数1.添加秒时,很少会遗漏一秒我在**Swift 4.***中找到的最可靠的方法是:
extension Date { func nearestHour() -> Date { return Date(timeIntervalSinceReferenceDate: (timeIntervalSinceReferenceDate / 3600.0).rounded(.toNearestOrEven) * 3600.0) } }
ycl3bljg5#
使用下面的代码。它一定对你有帮助。
NSString *dateString=@"17:15"; NSArray *strings = [dateString componentsSeparatedByString:@":"]; int firstPart=[[NSString stringWithFormat:@"%@",strings[0]] intValue]; int lastPart=[[NSString stringWithFormat:@"%@",strings[1]] intValue]; NSLog(@"LAST:%d",firstPart); if (lastPart>0) { int output=firstPart+1; NSString *finalOutput=[NSString stringWithFormat:@"%d:00",output]; NSLog(@"OUTPUT:%@",finalOutput); } else { NSLog(@"OUTPUT:%@",dateString); }
w6lpcovy6#
这是Swift 4/5版本-
func nextHourDate() -> Date? { let calendar = Calendar.current let date = Date() var minuteComponent = calendar.component(.minute, from: date) var components = DateComponents() components.minute = 60 - minuteComponent return calendar.date(byAdding: components, to: date) }
6条答案
按热度按时间3npbholx1#
下面是Swift 3.0的一个实现,它使用
Date
扩展来获取最接近的小时数:wbgh16ku2#
使用此方法
这将为您提供inDate的下一小时日期
ep6jt1vc3#
oiopk7p54#
由于以下几个原因,使用组件并不可靠:
1.不考虑秒数
1.添加秒时,很少会遗漏一秒
我在**Swift 4.***中找到的最可靠的方法是:
ycl3bljg5#
使用下面的代码。它一定对你有帮助。
w6lpcovy6#
这是Swift 4/5版本-