2013-06-10 43 views
5

Tôi có dữ liệu trong định dạnglàm tròn của NSdate đến giờ gần nhất trong iOS

thời gian: 13:52, 10:30, 11:48

vv

Tôi muốn làm tròn đến giờ gần nhất.

như cho 13:52 -> 14:00, 10:30 -> 11:00 và 11:48 -> 12:00.

Tôi có thể làm điều đó với NSDate bằng cách nào?

+1

Bạn đã thử làm như thế nào? – Wain

+1

1. Chia NSD thành các thành phần 2. Thêm nếu không và kiểm tra xem phút có lớn hơn 30 không. Không phải số phút của bạn và tăng số giờ của bạn lên một hoặc không làm gì cả. Đó là nó. Toán học đơn giản :-) – Oleg

Trả lời

7

Sử dụng phương pháp này

- (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]; 
} 

này sẽ cung cấp cho bạn ngày trong giờ tiếp theo cho inDate

+0

Chào bạn @Lithu Tv, tôi đang đặt múi giờ thành UTC, nếu tôi sử dụng mã của bạn, Nếu giờ hệ thống (Giờ Ấn Độ) là 6.10 chiều, tôi nhận được 7.30 chiều, Tương tự tôi thay đổi múi giờ sang Hoa Kỳ thiết bị theo cài đặt và sau đó thử và nếu thời gian là 8 giờ 20 sáng, tôi sẽ nhận được 9 giờ sáng. Tôi không hiểu tại sao? – Ranjit

+1

Đây là chức năng của hàm ceil. Nếu bạn có 10:15, nó sẽ không được làm tròn đến 10. Thay vào đó nó sẽ thay đổi thành 11:15. –

0

Sử dụng mã Dưới đây. Nó phải giúp ích cho bạn.

NSString *[email protected]"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); 
} 
+0

Hoạt động của nó. Cảm ơn rất nhiều – chandrika

4
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) 
} 
4

Dưới đây là một Swift 3.0 thực hiện mà được giờ gần nhất, sử dụng một Date tiện ích mở rộng:

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) 
    } 
} 
+0

Bạn cũng cần xóa giây? – chowey

Các vấn đề liên quan