开发者

NSDate - timeIntevalSinceDate -

开发者 https://www.devze.com 2023-03-17 01:31 出处:网络
I have 2 text fields where users can insert 2 time (ie. 12.00pm and 15.00pm) and a label that return the hours (ie 3 hours). I\'m using timeIntervalSinceDate but I\'m getting it in seconds (10800 sec

I have 2 text fields where users can insert 2 time (ie. 12.00pm and 15.00pm) and a label that return the hours (ie 3 hours). I'm using timeIntervalSinceDate but I'm getting it in seconds (10800 sec which is equal to 3 hours). How can I get the value in hours? here the code:

-(IBAction)calcoloBlockTime{
   NSString *blockOff = [NSString stringWithFormat:@"%@", [offBlock text]];
   NSString *blockIn= [NSString stringWithFormat: @"%@", [inBlock text]];
   NSDateFormatter *dateFormatter =[[NSDateFormatter alloc]init];
   [dateFormatter setDateFormat:@"HHmm"];
   NSDate *dateFromString = [dateFormatter dateFromString:blockOff];
   NSDate *dateFromString2 = [dateFormatter dateFromString:blockIn];
   NSLog(@"Time elapsed: %f"开发者_StackOverflow社区, [dateFromString2 timeIntervalSinceDate:dateFromString]);
}

thanks in advance.


If you are only interested in hours you can write:

NSInteger hours = 10800 / 3600; // You know that in an hour there is 3600 seconds

If you want minutes etc you will continue with the result of 10800 modulus 3600, which will give you the seconds which are left after dividing it by 3600.

NSInteger temp = 10800 % 3600;
NSInteger minutes = temp / 60;

And to get the seconds left after this you write:

NSInteger seconds = minutes % 60;


EDIT

myLabel.text = [NSString stringWithFormat:@"%d hours", hours];

If you want to set the hours on the label.


hours = seconds / 3600; Simple!!! And, it seems there is no way to get the hour from NSDate. You can use NSDateComponents, but they are too costly for your requirement.


I made a class method that returns a string with a formatted date of the remaining time between an NSDate and now.

+(NSString *)TimeRemainingUntilDate:(NSDate *)date {

    NSTimeInterval interval = [date timeIntervalSinceNow];
    NSString * timeRemaining = nil;

    if (interval > 0) {

        div_t d = div(interval, 86400);
        int day = d.quot;
        div_t h = div(d.rem, 3600);
        int hour = h.quot;
        div_t m = div(h.rem, 60);
        int min = m.quot;

        NSString * nbday = nil;
        if(day > 1)
            nbday = @"days";
        else if(day == 1)
            nbday = @"day";
        else
            nbday = @"";
        NSString * nbhour = nil;
        if(hour > 1)
            nbhour = @"hours";
        else if (hour == 1)
            nbhour = @"hour";
        else
            nbhour = @"";
        NSString * nbmin = nil;
        if(min > 1)
            nbmin = @"mins";
        else
            nbmin = @"min";

        timeRemaining = [NSString stringWithFormat:@"%@%@ %@%@ %@%@",day ? [NSNumber numberWithInt:day] : @"",nbday,hour ? [NSNumber numberWithInt:hour] : @"",nbhour,min ? [NSNumber numberWithInt:min] : @"",nbmin];
    }
    else
        timeRemaining = @"Over";

    return timeRemaining;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消