Вычисление TimeInterval - PullRequest
       15

Вычисление TimeInterval

1 голос
/ 03 апреля 2012

Я пытаюсь создать приложение, которое рассчитывает разницу во времени, а сумма умножается на сумму в деньгах.Предполагается рассчитать в R $ (бразильский реал) сумму, которую кто-то должен будет заплатить за использование службы в течение времени, рассчитанного приложением.

Вот мой код:

- (IBAction)encerrar:(id)sender {

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    dateFormatter.dateFormat = @"HH:mm";
    NSString *temp = inicio.text;
    NSDate *then = [dateFormatter dateFromString:temp];
    NSDate *now = [NSDate date];
    NSTimeInterval timeInterval = [now timeIntervalSinceDate:then];
    NSString *ext = [dateFormatter stringFromDate:now];
    fim.text = ext;
    NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]];
    NSString *timeString = [dateFormatter stringFromDate:timerDate];
    duracao.text = timeString;

    double timeIntervalInHours = (timeInterval / 3600.0) * 5;        

    NSString *vTotal = [[NSString alloc] initWithFormat:@"R$ %.2f", fecha];
    NSLog(@"%.2f", timeIntervalInHours);
    vlrTotal.text = vTotal;
}

Дело в том, что когда мы нажимаем кнопку «Рассчитать», и если duracao (продолжительность) равен 1 часу, это дает мне правильную сумму, которая составляет 5,00 рублей.Но когда продолжительность равна 30 минутам или другому значению, отличному от точного 1 часа, это дает неправильную сумму.

IE: 1 час должен быть R $ 5,00;в то время как 1:30h должно быть $ 7,50, но показывает мне $ 6,50.

Итак, кто-нибудь может мне помочь в этом ???

Заранее спасибо !!!

Ответы [ 3 ]

1 голос
/ 03 апреля 2012

timeInterval - это количество времени в секундах, поэтому, если вы хотите, чтобы оно было в часах и долях часа, просто сделайте это:

double timeIntervalInHours = timeInterval / 3600.0;

, а затем умножьте timeIntervalInHours на цену / часчтобы получить стоимость.

РЕДАКТИРОВАТЬ
На основе нашего чата, я бы создал кнопку с "iniciar" (начало) в качестве заголовка.Когда они нажимают эту кнопку, я сохраняю текущее время и меняю заголовок на «encerrar» (стоп).(Я надеюсь, что мои переводы верны, смеется). Тогда действие кнопки будет выглядеть примерно так:

// self.startTime is a NSDate.
- (IBAction)iniciar_encerrar:(UIButton *)sender {
    if ([sender.titleLabel.text isEqualToString:@"iniciar"]) {
        // We are starting the time
        if (self.startTime != nil) {
            return;
        }

        self.startTime = [NSDate date];
        [sender setTitle:@"encerrar" forState:UIControlStateNormal];
    } else {
        // We are stopping the time
        NSDate *currentTime = [NSDate date];
        NSTimeInterval elapsedTimeInSeconds = [currentTime timeIntervalSinceDate:self.startTime];
        double cost = elapsedTimeInSeconds / 3600.0 * 5.0;
        NSLog(@"%.2lf", cost);

        // reset the button
        self.startTime = nil;
        [sender setTitle:@"iniciar" forState:UIControlStateNormal];
    }
}

startTime объявлен следующим образом:

В вашем.h файл, наряду с другими объявленными свойствами, добавьте:

@property (strong, nonatomic) NSDate *startTime;

В ваш файл .m добавьте его вверху вместе с другими:

@synthesize startTime;

В вашем *Функция 1024 * (в вашем файле .m) добавляет это:

startTime = nil;

Это просто дает вам место для хранения даты начала и времени.

1 голос
/ 03 апреля 2012

Вы конвертируете временную строку HHmm в число с плавающей точкой, поэтому через 1,5 часа у вас будет число с плавающей точкой 130 (1 час 30 минут).Я не могу следовать вашим расчетам оттуда.Я думаю, что вам нужно иметь два средства форматирования, одно для получения минут, а другое для часов, например:

formatter.dateFormat = @"HH";
float hours = [[formatter stringFromDate:timerDate] intValue] * 1.0;
formatter.dateFormat = @"mm";
hours += [[formatter stringFromDate:timerDate] intValue]/60.0; //convert min to fractional hours and add
0 голосов
/ 03 апреля 2012

Я бы преобразовал сумму $ R5,00 из почасовой суммы в сумму в секунду для большей точности.5/60 минут / 60 секунд дает вам .00388889, который вы умножите на (длительность * 1000), чтобы получить точный результат.

...