Как я могу обработать эту метку времени в европейском стиле? - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь просмотреть тысячи строк в файлах субтитров видео (в формате .srt) и несколько дней подряд искал в inte rnet решение, но безрезультатно. Подпрограммы содержат временные метки входа / выхода, как показано в следующем примере:

61
00:08:35,504 --> 00:08:38,629
Do you know where he left the car keys?

в часах, минутах, секундах и миллисекундах (обратите внимание на запятую европейского стиля перед миллисекундной частью, представляющей десятичная точка). Я планирую разобрать метку времени на два ее компонента и проверить разницу между ними, поскольку многие из них неисправны. Я создал простую тестовую функцию для обработки простой части hh: mm: ss, которая работает хорошо:

    -(IBAction)checkSubLength:(id)sender
      {
      NSString *inStr = @"10:10:45";
      NSString *outStr = @"10:20:57";

      NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      [dateFormatter setDateFormat:@"hh:mm:ss"];

      NSDate *inTime = [dateFormatter dateFromString:inStr];
      NSDate *outTime = [dateFormatter dateFromString:outStr];
      NSTimeInterval distanceBetweenDates = [outTime timeIntervalSinceDate:inTime];

      NSLog(@"time difference:%.3f", distanceBetweenDates);
      }

Однако я просто не могу заставить отображать дробную часть независимо от что Я пытаюсь. Как я могу изменить / изменить свой код? Любая помощь очень ценится.

1 Ответ

1 голос
/ 14 июля 2020

Вам необходимо указать миллис в строке формата:

    NSString *inStr = @"10:10:45,111";
    NSString *outStr = @"10:20:57,222";

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"hh:mm:ss,SSS"];

    NSDate *inTime = [dateFormatter dateFromString:inStr];
    NSDate *outTime = [dateFormatter dateFromString:outStr];
    NSTimeInterval distanceBetweenDates = [outTime timeIntervalSinceDate:inTime];

    NSLog(@"time difference:%.3f", distanceBetweenDates);

, который затем напечатает

разница во времени: 612,111

как ожидалось

...