NSDate - timeIntevalSinceDate - - PullRequest
       6

NSDate - timeIntevalSinceDate -

1 голос
/ 02 июля 2011

У меня есть 2 текстовых поля, в которые пользователи могут вставить 2 раза (например, 12.00 и 15.00) и метку, которая возвращает часы (то есть 3 часа). Я использую timeIntervalSinceDate, но получаю его за считанные секунды (10800 секунд, что соответствует 3 часам). Как я могу получить значение в часах? вот код:

-(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", [dateFromString2 timeIntervalSinceDate:dateFromString]);
}

спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 02 июля 2011

Если вас интересуют только часы, вы можете написать:

NSInteger часов = 10800/3600; // Вы знаете, что через час 3600 секунд

Если вам нужны минуты и т. Д., Вы получите результат 10800 с модулем 3600, который даст вам секунды, оставшиеся после его деления на 3600.

NSInteger temp = 10800% 3600;
NSInteger минут = температура / 60;

И чтобы получить секунды, оставшиеся после этого, вы пишете:

NSInteger секунд = минут% 60;


EDIT

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

Если вы хотите установить часы на этикетке.

1 голос
/ 02 июля 2011

часов = секунд / 3600; Просто !!! И, кажется, нет способа получить час от NSDate . Вы можете использовать NSDateComponents , но они слишком дороги для вашего требования.

0 голосов
/ 08 ноября 2011

Я создал метод класса, который возвращает строку с отформатированной датой оставшегося времени между NSDate и 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;
}
...